重置Isotope和Knockout布局

时间:2012-10-20 07:10:47

标签: jquery knockout.js jquery-isotope

我无法根据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中删除所有项目并逐个读取它们。

http://jsfiddle.net/8uxKF/2/

  1. 在IE10中完全失败。 fiddles运行窗格甚至没有加载。

  2. 它部分适用于Chrome,但重置后,只要启动排序,就会输出控制台错误:

    未捕获的TypeError:对象#没有方法'sortBy'

  3. 在FF中,它的工作原理与chrome类似。 (但在我的应用程序中无法排序)

  4. 有人可以帮忙吗?重置后我需要排序才能工作。我不确定这是否是“最佳”重置方式,因为它似乎会导致问题。

2 个答案:

答案 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以供参考。