2013-10-14 27 views
0

我試圖創建一個可排序的項目列表。在這一刻,我正在使用jQuery對此進行排序。該列表使用Ember視圖創建。當一件物品被丟棄時,我想用新訂單更新Ember模型。在稍後階段,我想將其保存回服務器。在jQuery事件處理函數中使用Ember.js模型

在下面的代碼中,您可以看到我是如何將jQuery代碼附加到視圖元素的。拖動本身非常完美,停止功能也被調用。

Scrum.Sortable = Ember.View.extend({ 
tagName : 'div', 
didInsertElement: function(){ 
    this.$().sortable({ 
     placeholder: "ui-state-highlight", 
     stop:function(){ 
      var order = 1; 
      $('div.pb-item').children().each(function(index){ 
       $(this).find('.order').each(function(){ 
        // 
        // Access and save the model here 
        // 
        $(this).html(order++); 
       }); 
      }); 
     } 
    }); 

} 
}); 

你也可以看到我手動更新視圖html。這是我想在模型中存儲的內容。不幸的是,我似乎無法訪問該模型。

任何想法如何做到這一點非常感謝。

謝謝。

+0

你能提供一個JSbin嗎? – Edu

+0

似乎我不能。並非所有庫都可用,而且我似乎無法從其他位置加載它們。 – rbevers

+0

在這個頁面中有JSBin和JSFidle的ember的起點http://stackoverflow.com/tags/ember.js/info – Edu

回答

2

只需在函數外部保存對控制器的引用,以便變量在閉包中可見。然後你就可以訪問控制器,因此你的模型等

didInsertElement: function() { 
    controller = this.get('controller') 
    ... 
    $(this).find('.order').each(function(){ 
     // Here you have access to the controller variable. 
    }); 
    ... 
} 

由於控制器一般保持在整個視圖的整個生命一樣,這是安全的,比保存到一個更好的參考你的模型本身,因爲你的模型可能會改變。

1

您可以訪問控制器並從控制器訪問模型。

this.get('controller').get('model')或者您也可以將上下文傳遞給您的視圖,這可能是您的模型。 {{view Scrum.Sortable context = this}}

+0

感謝您的回覆。閉合內部是一個不同的上下文。 this.get在那裏不存在。所以我需要一種方法從閉包中訪問Ember應用程序上下文,或者找到一種處理排序的不同方式。 – rbevers

相關問題