对某些人来说可能是一个微不足道的问题。我的对象有一个视图模型,如下所示:
this.Activities = ko.observableArray([
{ "date": "28/11/2012 00:00:00",
"activities": [
{ "company": "BOW",
"description": "Backup Checks",
"length": "60"
},
{ "company": "AMS",
"description": "Data Request",
"length": "135"
},
]},
{ "date": "30/11/2012 00:00:00",
"activities": [
{ "company": "BOW",
"description": "Backup Checks",
"length": "60"
},
{ "company": "SLGT",
"description": "Software Development",
"length": "240"
},
{ "company": "BOW",
"description": "Data Request",
"length": "30"
},
]},
]);
Run Code Online (Sandbox Code Playgroud)
我想构建一个可以隐藏活动数组并显示日期的手风琴。每当单击某个日期时,将通过展开下面的相应面板来显示与该日期匹配的活动列表。现在,在我不使用 Knockout.js 的项目中,我只是使用通用 Activity 对象的 Id 将手风琴标题的 ID 属性与手风琴主体元素中的名称属性链接起来。我在强类型视图中使用模型属性来实现这一点。由于在 Knockout.js 中我提供了一个包含活动细节的视图模型,因此我对在数据绑定时创建的 Html 结构的控制有限。那么如何将手风琴标题与匹配的正文元素链接起来?
以下绑定在1.9之前有效:
ko.bindingHandlers.accordion = {
init: function(element, valueAccessor) {
var options = valueAccessor() || {};
setTimeout(function() {
$(element).accordion(options);
}, 0);
ko.utils.domNodeDisposal.addDisposeCallback(element, function(){
$(element).accordion("destroy");
});
},
update: function(element, valueAccessor) {
var options = valueAccessor() || {};
$(element).accordion("destroy").accordion(options);
}
}
Run Code Online (Sandbox Code Playgroud)
但自1.9以来,它不再有效,并给出以下错误:
Uncaught Error: cannot call methods on accordion prior to initialization; attempted to call method 'destroy'
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚原因.我查看了jQuery UI升级说明,但似乎没什么关系.
造成这种情况的原因是什么,我的绑定需要改变什么?