簡體   English   中英

灰燼編號 <Object> 沒有方法“設置”

[英]Ember #<Object> has no method 'set'

我在路線中提取JSON數據,如下所示:

App.CollectionRoute = Ember.Route.extend({
 setupController: function(controller, model){
    $.getJSON('../returnitems.json', function(data){
      controller.set('returnItems', data);
    })
 }
});

這給了我一個我可以在模板中迭代的對象:

{{#each destination in controller.returnItems}}

現在,我想通過控制器使用以下代碼刪除某些內容:

this.get('controllers.collection').get('returnItems')[returnIndex].set('hasItems', false);

出現以下錯誤:

Uncaught TypeError: Object #<Object> has no method 'set' 

但是當我使用時:this.get('controllers.collection')。get('returnItems')[returnIndex] .hasItems = false

它告訴我使用get和set ?!

您不應該在setupController掛鈎中進行AJAX調用。 您應該使用modelafterModel掛鈎,以便Ember在完全過渡到路由之前一直等到afterModel成功。

現在,您無法調用set方法,因為$.getJSON返回一個普通的舊Javascript對象數組,而不是您期望的Ember.Object數組。

相反,您將執行以下操作:

App.CollectionRoute = Ember.Route.extend({
 afterModel: function(controller, model) {
    var self = this;
    return $.getJSON('../returnitems.json', function(data_items){
        var items = [];
        for (var i = 0; i < data_items.length; i++) {
            items.push(Ember.Object.create(data_items[i]));
        }
        self.set('returnItems', items);
    });
 },
 setupController: function (controller, model) {
    controller.set('returnItems', this.get('returnItems'));
 }
});

然后,您將能夠:

this.get('controllers.collection').get('returnItems').objectAt(returnIndex).set('hasItems', false);

我希望這可以幫助你!

嘗試使用

this.get('controllers.collection').get('returnItems').objectAt(returnIndex).set('hasItems', false); 

請參閱: http : //emberjs.com/api/classes/Ember.Array.html#method_objectAt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM