0

私が持っているもの:

ビューを再レンダリングする編集機能があります。

MyView = Backbone.View.extend({

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

なんて問題:

編集機能ビューを閉じることができるユースケースがあるため、編集view.render()機能の最後に呼び出してはなりません。

質問:

編集機能内でビューが既に閉じられているかどうかを確認する方法は? 何かのようなもの:

MyView = Backbone.View.extend({

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

@net.uk.sweet の場合:

Bootstrap X-Editable を使用しています。それの助けを借りて、テストフィールドを変更できます。テキスト フィールドを変更するには、それをクリックして値を変更し、その外側 (テキスト フィールドの外側) をクリックするだけです。このような場合、メソッドsuccessが呼び出されます。

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. 閉じるボタンをクリック

そのような場合はどうなりますか:

2 つのアクション:

  1. ビューは閉じられています
  2. を呼び出す成功view.render()メソッドですが、してはなりません!

概要:

ビューが閉じられている場合、成功メソッドの内部を確認する必要があります。

粗い解:

もちろん、最善の解決策ではなく、いくつかの解決策を見つけたようです。

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

1 に答える 1