Backbone.js获取列表以确保只存在某个模型的一个实例

时间:2014-01-13 21:24:15

标签: javascript backbone.js

原谅我,我是骨干新手,以及MVC javascript概念。

所以,我正在建立一个评论系统:

createComment: function () {
        // create new comment model

        var comment = new CommentModel({});

        // render form view right after new button
        var formview = new FormView({model: comment});
        this.$el.after(formview.render().$el);

        // add saved model to collection after form was submitted successfully
        formview.on('success', this.handleFormSuccess, this);

        // finally, return false to stop event propagation
        return false;
    },

我无法理解的是如何获取已呈现但尚未发送到集合的注释列表。看,我想确保一次只打开一个评论框。

我的方法是检查有多少评论是打开的,并关闭除当前模型之外的所有人。

Using Backbone.js & Underscore, how to get a count of items from the model?似乎在模型点击集合后提供了如何执行此操作的建议。

我对骨干很新,所以我完全有可能在这方面走错了方向。

如何获取列表?

1 个答案:

答案 0 :(得分:0)

正如Joe建议的那样,我认为你的问题就在这一行:

formview.on('success', this.handleFormSuccess, this);

但是,我不认为他的建议(将“成功”更改为“同步”)也可以,因为formview查看,而不是模型集合,因此它甚至没有on方法。

on方法是视图的元素,所以你可以这样做:

formview.$el.on('success', this.handleFormSuccess, this);

虽然有两个问题:

  1. jQuery很蹩脚,不允许你像这样设置上下文
  2. “成功”不是表格事件;您希望此代码在“提交”
  3. 上触发

    所以要解决您需要将这两行更改为:

    formview.$el.on('submit', _(this.handleFormSuccess).bind(this));
    

    或者您也可以致电:

    _(this).bindAll('handleFormSuccess');
    
    FormView的{​​{1}}中的

    ,这样可以使您无需绑定initialize

    this.handleFormSuccess)

    希望有所帮助。