使用 jquerymobile 和淘汰赛,我正在尝试创建一个自定义绑定,如下所示
<ul data-bind="listview: observablearray">
<li data-bind="text: text"></li>
</ul>
listview 绑定首先会像 foreach 绑定一样起作用,然后将 $(element).listview() 应用于它(或 $(element).listview('refresh') 在更新时)。
我尝试执行以下操作来天真地模仿 foreach 绑定:
ko.bindingHandlers.listview = {
init: function (element, valueAccessor) {
var listview = $(element);
listview.listview();
},
update: function (element, valueAccessor) {
var listview = $(element);
setTimeout(function () {
listview.html('');
var items = valueAccessor().list;
var link = valueAccessor().link;
var text = valueAccessor().text;
var icon = valueAccessor().icon;
$.each(ko.utils.unwrapObservable(items) || [], function (i, item) {
var li = $('<li></li>').css({
height: '44px'
})
var a;
if (link) {
a = $('<a href="#"></a>').click(function () {
link(item)
});
li.append(a);
}
if (icon) {
(a || li).append($('<img />').attr('src', icon(item)).addClass('ui-li-icon'));
}
if (text) {
(a || li).append($('<span></span>').text(item[text]));
}
listview.append(li);
});
listview.listview('refresh')
}, 0);
}
};
不幸的是,这不仅是一个不使用模板的糟糕实现,而且在 init 上也出现了错误:
未捕获的类型错误:无法读取未定义的属性“jQuery19101983379740267992”
提前致谢!