我无法根据Knockout模型重置/刷新/重新加载同位素视图。我已经扩展了一个早期的小提琴来删除和替换项目,但它不可靠并打破了排序。
self.reset = function () {
// Remove all services
$.each(self.services(), function (index, value) {
var serviceToDelete = self.services()[0]
self.removeService(serviceToDelete);
})
// Add some back
self.services.push(new Service('some service', 'and this is a description', 7, '01/01/2000'));
self.services.push(new Service('another service', 'just another description', 2, '02/01/2000'));
self.services.push(new Service('driving school', 'learn to drive', 4, '10/01/2000'));
self.services.push(new Service('ice cream sunday', 'sweet cold and delicious', 3, '01/01/2002'));
self.services.push(new Service('tootie fruity', 'a rootie', 6, '01/01/2003'));
self.services.push(new Service('hand gliding', 'you can see your house from here', 5, '01/01/2012'));
self.services.push(new Service('turkey dinner', 'is not just for thanksgiving', 1, '01/01/2011'));
}
我已经使用“重置”按钮扩展了以下jsfiddle,它只是从observableArray中删除所有项目并逐个读取它们。
在IE10中完全失败。 fiddles运行窗格甚至没有加载。
它部分适用于Chrome,但重置后,只要启动排序,就会输出控制台错误:
未捕获的TypeError:对象#没有方法'sortBy'
在FF中,它的工作原理与chrome类似。 (但在我的应用程序中无法排序)
有人可以帮忙吗?重置后我需要排序才能工作。我不确定这是否是“最佳”重置方式,因为它似乎会导致问题。
答案 0 :(得分:0)
self
没有名为sortBy()
的函数/属性(也不会有sortDir()
)。您的serviceAdded
“事件”试图调用那些不存在的属性,因此失败。
我不清楚你应该做什么,你的代码到处都是。也许您应该将这些可观察对象添加到视图模型中?
function ViewModel() {
var self = this;
// ...
self.sortBy = ko.observable('name');
self.sortDir = ko.observable('ascending');
}
答案 1 :(得分:0)
我已经检查了代码及其罚款,除了我已经纠正的sortByID上的一个错误。
令人沮丧和令人尴尬的是,当GitHub提供服务时,由于mimetype不匹配,jsFiddle似乎阻止了其中一个资源。要明确这是在jsFiddle中从GitHub运行外部脚本的问题。
最终代码发布到jsfiddle.net/8uxKF/3以供参考。