【问题标题】:Is there a way to have conditional "add" events in backbone.js?有没有办法在backbone.js 中有条件的“添加”事件?
【发布时间】:2011-03-15 10:29:21
【问题描述】:

我在我的网络应用程序中使用了主干.js,到目前为止它运行良好。问题是有时我需要将项目添加到集合中并让它们进入页面顶部,而其他时候则进入底部。有时我需要他们制作动画,有时不需要。有没有办法用backbone.js干净地做到这一点?将参数传递给“add”事件将是一个好方法(例如“prepend: true”),但这似乎不是一个选项......

谢谢!

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    扩展 Backbone.Collection 并覆盖 add 函数:

    PositionCollection = Backbone.Collection.extend ({
      add: function( model, options ){
        // do your stuff
        // call the real add
        Backbone.Collection.prototype.add.call(this, model);
      }
    });
    

    唯一要记住的是,如果您预先添加,附加您可能希望完全复制 Backbone.Collection.add 并使用它。

    您也可以依赖集合排序。将您的位置和动画属性添加到模型中,对位置进行排序并监听集合上的“添加”事件以正确设置动画。

    【讨论】:

    • Julien 说了什么......(他似乎是这里的骨干.js 大师)
    • 谢谢你,优雅而干净。
    • 嗯,发生了一些奇怪的事情。如果我这样做(我只是在集合声明中添加它,所以它是 Backbone.Collection.extend({model: MyModel, add: });,我得到“this.model.get is not a function”当我尝试运行它时(该错误出现在 View 的 render() 方法中)。我决定在集合中设置一些实例变量作为标志,虽然它不干净,但效果很好。
    • 对查看此页面的人的一般提示:您应该尝试在模型/集合中添加对“add”事件的绑定,而不是覆盖内置的 add 方法。它比处理 Javascript 调用父方法的方法更容易。这假设您不想阻止默认行为。
    • 戴夫,集合的添加事件是否会先触发/在任何其他可能正在监听该集合添加事件的视图之前触发?如果这是依赖行为,我认为“接受”的答案可能是唯一的方法。虽然我不确定。
    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2021-09-26
    • 2020-08-19
    相关资源
    最近更新 更多