所以我敢肯定,我不是第一个尝试这样做的人,但是我在这里找不到任何与我要尝试的例子匹配的例子。
我有一个这样定义的Knockout自定义绑定。
ko.bindingHandlers.table = {
init: function (element, valueAccessor) {
value = ko.unwrap(valueAccessor());
//Create a table
};
目标是最大程度地减少想要创建表的用户对javascript的了解。我希望他们提供的HTML是这样的:
data-bind="table: foo, columns: ['id', 'first name', 'last name', ect...]"></table>
我希望能够以类似数组的格式指定列(再次尝试不使用任何JS)。我知道我可以做一些愚蠢的事情,例如col1:'id',col2:'first name',但是我宁愿有一个对象/数组,我可以轻松地在创建时使用.length()我的桌子。
我确实有使用Jquery处理数据的变通方法,但是如果可以的话,我宁愿做这样的事情。
最后但不是租约,我假设我将通过allBindings访问器访问该对象,如果对此感到误解,请告诉我。先感谢您。
您最好使用其中一个现有的表bindingHandlers。无论是淘汰赛的Contrib的KO网,@ MichaelBest的以上建议表或其他任何这是已经在那里。
关于你的问题;绑定数组就像您想的那样简单,只需在绑定中输入数组(或绑定到保存数组的属性)即可。但是,您实际上是在问使用abindingHandler
从多个绑定中读取设置。要做到这一点,使用的第三个参数init
/update
你的函数bindingHandler
,该allBindings
参数。
这种绑定的一个简单示例可以是:
ko.bindingHandlers['table'] = {
init: function(element, valueAccessor, allBindings){
var data = ko.unwrap(valueAccessor());
var columns = allBindings.get('columns');
var table = document.createElement('table');
for(var i = 0; i < data.length; i++){
var currentItem = data[i];
var row = document.createElement('tr');
for(var j = 0; j < columns.length; j++){
var column = document.createElement('td');
column.innerText = currentItem[columns[j]];
row.appendChild(column);
}
table.appendChild(row);
}
element.appendChild(table);
}
};
然后,您可以bindingHandler
像这样使用它:
<div data-bind="table:data, columns: ['id','firstName']"></div>
我在http://jsfiddle.net/TK9y2/中有一个使用上述绑定的工作示例
请注意,该allBindings
参数还提供了一种has
方法,您应使用该方法来检查是否存在与您要查找的名称绑定。您可以在Knockout文档中的自定义绑定中阅读有关此内容的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句