Backbone:检查View是否已关闭

时间:2013-11-13 13:59:23

标签: javascript backbone.js backbone-views backbone-events x-editable

我拥有的内容:

我有一个编辑功能,我在其中重新渲染我的视图;

MyView = Backbone.View.extend({

    edit: function (view) {
      ......
      view.render();
    }
});

出了什么问题:

有一个用例,在 edit 函数视图中可以关闭,所以我不能在编辑函数结束时调用view.render()

问题:

如何检查编辑功能中是否已关闭视图?类似的东西:

MyView = Backbone.View.extend({

    edit: function (view) {
      ......
      if (!view.isClosed()) 
          view.render();
    }
});

对于@ net.uk.sweet:

我使用Bootstrap X-Editable。借助它,我可以修改测试字段。要修改文本字段,我只需要单击它,更改值,然后单击它外部(文本字段之外)。在这种情况下,方法成功将被调用。

textEditor: function(view) {               
            $(this).editable({
                type: 'textarea',
                mode: 'inline',
                onblur: 'submit',
                showbuttons: false,
                inputclass: 'edit-comments-text-input',
                validate: function(value) {
                    if (!value.trim()) {
                        return 'Can not be empty!';
                    }
                },
                success: function(response, newValue){
                    //modify the comment
                    comment.text = newValue.trim();
                    //rerender
                    if (!view.isClosed()) //This line is what I need, but view hasn't isClosed method ((
                        view.render();
                }
            });
}

另外值得一提的是,用户可以通过点击关闭按钮或点击视图外来关闭视图。

问题用例:

  1. 用户点击x-editable字段
  2. 更改文字
  3. 点击关闭按钮
  4. 在这种情况下会发生什么:

    两个动作:

    1. 查看已关闭
    2. 成功方法,它调用view.render(),但不得!
    3. 要点:

      如果视图已关闭,我需要检查成功方法内部。

      粗略解决方案:

      似乎我找到了一些解决方案,当然不是最好的解决方案。

      if ($(view.el).hasClass('in'))
         view.render();
      

1 个答案:

答案 0 :(得分:1)

MyView = Backbone.View.extend({

    initialize : function() {
        this.setClosed(false);
    },

    setClosed : function(booleanValue) {
        this.closed = booleanValue;
    },

    getClosed : function() {

        return this.closed;

    },

    edit: function () {

        var view = this;
        //......
        if (!view.getClosed()) {
            view.render();
        }
    }
});