0

ドロップイベントでビューを更新するのに少し問題があります。問題は関数handleDrop()にあると確信しています。ビューの再レンダリングは、ブラウザの通常のmodel.set({})テストで機能しました。だから、私はそれが問題がある場所ではないことを知っています...

バックボーンルーター

App.Routers.Dashboard = Backbone.Router.extend({

routes: {
    "": "index"     
},

initialize: function(options) {

    },

index: function() {

var preflist = new App.Models.PrefList({});

preflist.fetch({
    success: function() {
      var paneloneview = new App.Views.PanelOne({ model: preflist });
      $('#panelone').html(paneloneview.render().$el);
    }  
});

var sourceID;
var payloads = {
poolpricedraggable: "poolprice",
nonedraggable: "smp"
};

var element = function(id) { return document.getElementById(id); }

function handleDragOver(event) {
if(event.preventDefault) event.preventDefault();
return false;
}
function handleDrop(event) {
    dropzone = this.id;
    if(event.preventDefault) event.preventDefault();
    console.log("recevied the data: " + payloads[sourceID] + " in #" + dropzone);
    var attribute = preflist.get('panel_one');
    preflist.set({panel_one: attribute});
    preflist.save();
}  

element('panelone').addEventListener('dragover', handleDragOver, false);            
element('panelone').addEventListener('drop', handleDrop, false);

PanelOneビュー

App.Views.PanelOne = Backbone.View.extend({

initialize: function() {                
    _.bindAll(this, 'render');
    this.model.bind('change', this.render);
},

render: function(){
    var panelonesetting = this.model.get('panel_one');
    this.$el.html(JST['dashboard/' + panelonesetting]({}));
return this;
}

});

よろしくお願いいたします。AC

4

2 に答える 2

0

ここで確認できる問題の1つは、モデル自体から同じ値を使用してモデルの値を設定しようとしていることです。これは、値をそれ自体に置き換えているため、基本的に無視され、モデルの変更は検出されません。したがって、レンダリングメソッドが呼び出されていません。

triggerモデルのメソッドを使用して、モデルのレンダリングまたはトリガー変更イベントを手動で呼び出すことができます。(あなたが提供したコードの外で何かが起こっている場合-私がここで見ることができるもので、とにかく何も変わらないのでしょうか?)

ドラッグしたオブジェクトの情報を使用してモデルの設定を変更するのを忘れましたか?

于 2012-12-16T10:29:00.383 に答える
0

上記の私の質問のコードは本当に夜遅くに書かれました。今、私はトムとムーが私が犯した恥ずかしい間違いを指摘しているのを見て目覚めました(これは酔ったダイヤル事件に似ています)。それでも、ここに修正されたコードがあります。これはすべて、モデル属性を設定するためのドラッグアンドドロップ機能を含めたいバックボーンアプリを持っている人にとって便利なはずです。

    function handleDrop(event) {
       //  This dropzone var isn't used for anything here but may be useful for others. So, I've left it in...
       dropzone = this.id;
       // This preventDefault is necessary to prevent actions some older browsers like to do on drop events
       if(event.preventDefault) event.preventDefault();
       //  This model attribute should be set to the payload listed above
   preflist.set({ panel_one: payloads[sourceID] });
   preflist.save();
        }
于 2012-12-16T17:06:10.643 に答える