2012-12-16 55 views
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

我作一個假設,preflist是骨幹模型。你的錯誤發生在這裏:

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

這裏的data變量是一個字符串,但骨幹模型set - 功能需要的屬性鍵值對

設置 model.set的散列(屬性[選項])

屬性集的哈希(型號一個或多個)...

所以,你應該做這樣的:

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

編輯,畝太短的評論是好

根據Backbone.js的docs

您還可以通過單獨的鑰匙和價值。

所以這是一個更好的解決辦法,很明顯:

preflist.set(dataattribute, datavalue); 

希望這有助於?

+0

你是對的jakee。真棒!一切工作都應該如此!對於任何人使用這篇文章作爲資源,我在「目標」變量中的每個值都包含一個冒號,在遵循jakee指令時需要將其刪除。感謝jakee! – ac360

+2

你也可以'preflist.set(dataattribute,datavalue)'因爲[「你也可以傳遞個別鍵和值」](http://backbonejs.org/#Model-set)。 –

+0

優點,不得不走的艱難路! – jakee