1

http://tinkerbin.com/pla4NzJ9

バックボーン ビューがインスタンス化され、 を使用して小さなデモが作成されましthis.$el.jScrollPane()jScrollPane

5 秒後にビューを再レンダリングすると、 がjScrollPane消えます。理由を知っている人はいますか?

ここで私はjsを複製しました:

var ScrollableView = Backbone.View.extend({
  initialize: function() {
    this.render();
  },

  render: function () {
    this.$el.html(_.template($('#scrollable_template').html(), {})); 
    this.$el.jScrollPane();
    return this;
  }
});

$(function () {
  var scrollableView = new ScrollableView({ el: $('#scrollable') });
  setTimeout(function() {
    scrollableView.render();
    console.log("re-rendered");
  }, 5000);
});
4

3 に答える 3

2

を呼び出すと、プラグインはこれを行いますthis.$el.jScrollPane()

return this.each(
    function()  
    {
        var elem = $(this), jspApi = elem.data('jsp'); 
        if (jspApi) {
            jspApi.reinitialise(settings); 
        } else {
            jspApi = new JScrollPane(elem, settings); 
            elem.data('jsp', jspApi);  
        }
    }   
);

elem.data('jsp')チェックに注意してください。つまり.jScrollPane()、要素で2回目に呼び出したときに何か違うことを意味します。

これを行う場合:

this.$el.html(_.template($('#scrollable_template').html(), {})); 

.jScrollPane()最初の呼び出しで追加されたすべての余分な要素とイベント ハンドラーを削除します。.jScrollPane()それからもう一度呼び出すと、.data('jsp')そこにあることがわかるので、おそらくすべてがすでにそこにあると想定し、適切に設定していません。

jScrollPane API にはメソッドがありdestroyますが、動作させることができません。ただし、データを手動で削除してもjspうまくいくようです:

render: function () {
  this.$el.removeData('jsp');
  this.$el.html(_.template($('#scrollable_template').html(), {})); 
  this.$el.jScrollPane();
  return this;
}

しかし、それが何か悪いことをするかどうかは正直わかりません。私はそれをもっといじって、必死になるdestroy前に仕事をしようとします。removeDate('jsp')

于 2012-05-23T22:54:13.883 に答える
0

バックボーン ビューjscollpaneのメソッド上でインスタンス化し、メソッド内で のメソッドを使用する必要があります。initialize()render()reinitialze()jscrollpane

于 2012-05-24T12:04:17.817 に答える