2

これは、私が JavaScript に不慣れで、正しい構文がわからないという事実が原因である可能性がありますが、この現在の構文では、このドロップ イベントに設定するバックボーン モデル属性を取得できません。助言がありますか?すでに handleDrop を使用していくつかのテストを実行し、モデル インスタンスを設定して保存することはできましたが、handleDrop 関数の現在のコードではできませんでした。

これを書くためのより効率的な方法に関する他の提案はいつでも大歓迎です:)

        //Set the data contained by the draggable elements
        var sourceID;
        var payloads = {
            poolpricedraggable: "poolprice",
            nonedraggable: "none"
        };

        //Set the data contained in the droppable elements
        var targetID;
        var targets = {
            panelone: "panel_one:",
            paneltwo: "panel_two:",
            panelthree: "panel_three:",
            panelfour: "panel_four:",
            panelfive: "panel_five:",
            panelsix: "panel_six:"              
        }

        //Create variable for all draggable & droppable elements
        var element = function(id) { return document.getElementById(id); }

        //Create event handlers for all drag and drop events
        function handleDragStart(event) {
            sourceID = this.id;
        }
        function handleDrop(event) {
            if(event.preventDefault) event.preventDefault();
            targetID = this.id;
            var dataattribute = targets[targetID];
            var datavalue = payloads[sourceID];
            var data = dataattribute + " " + datavalue;
          preflist.set(data);
            preflist.save();
        }

        //Add listeners for those events to the correct dashboard elements
        element('poolpricedraggable').addEventListener('dragstart', handleDragStart, false);

        element('panelone').addEventListener('drop', handleDrop, false);
        element('paneltwo').addEventListener('drop', handleDrop, false);
        element('panelthree').addEventListener('drop', handleDrop, false);
        element('panelfour').addEventListener('drop', handleDrop, false);
        element('panelfive').addEventListener('drop', handleDrop, false);
        element('panelsix').addEventListener('drop', handleDrop, false);
4

1 に答える 1

4

私はそれpreflistがバックボーンモデルであると仮定します。あなたの間違いはここで起こります:

var data = dataattribute + " " + datavalue;
preflist.set(data);

ここdataでの変数は文字列ですが、Backboneモデルset関数は属性のハッシュをキーと値のペアとして受け取ります

set model.set(attributes、[options])

モデルに属性(1つまたは複数)のハッシュを設定します...

したがって、次のようにする必要があります。

// var data = dataattribute + " " + datavalue; REMOVE THIS
var data = {};
data[dataattribute] = datavalue;
preflist.set(data);

編集、muは短すぎるコメントの方が良かった

Backbone.jsのドキュメントによると

個々のキーと値を渡すこともできます。

したがって、これは明らかにより良い解決策です。

preflist.set(dataattribute, datavalue);

お役に立てれば?

于 2012-12-16T21:49:51.520 に答える