jquerymobile とノックアウトを使用して、次のようなカスタム バインディングを作成しようとしています。
<ul data-bind="listview: observablearray">
<li data-bind="text: text"></li>
</ul>
リストビュー バインディングは最初に 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 のエラーによっても発生しました。
キャッチされていない TypeError: 未定義のプロパティ 'jQuery19101983379740267992' を読み取れません
前もって感謝します!