2012-09-21 57 views
0

在我的路由器,我這樣做:如何修改Emberjs控制器中的對象,以便更新視圖?

connectOutlets: function(router) { 
    router.get('applicationController').connectOutlet(
     'acquisitions', router.get('acquisitionsController').find()); 
} 

AcquisitionsController看起來是這樣的:

(function(app) { 
    'use strict' 

    var AcquisitionsController = Ember.Controller.extend({ 
    all: [], 

    find: function() { 
     var self = this, 
      pk = $('#object-pk').attr('data-value'); 

     var imageResource = App.Image.create({id: pk}); 
     imageResource.fetch().done(function(data) { 
     _.each(data.acquisition_pks, function(value, index) { 
      var acquisitionResource = App.Acquisition.create({id: value}); 
      acquisitionResource.fetch().done(function(data) { 
      self.all.addObject(data); 
      }); 
     }); 
     }); 

     return self.all; 
    }, 

    remove: function(acquisition) { 
     var self = this; 
     var acquisitionResource = App.Acquisition.create(acquisition); 
     acquisitionResource.destroy().done(function() { 
     self.all.removeObject(acquisition); 
     }); 
    }, 

    addDuration: function(acquisition) { 
     var self = this; 
     if(acquisition.duration === null) { 
     acquisition.duration = 1; 
     var acquisitionResource = App.Acquisition.create(acquisition); 
     var obj = self.all.findProperty('id', acquisitionResource.data.id); 
     if (obj !== undefined) 
      obj.duration = 1; 
     acquisitionResource.save(); 
     } 
    } 
    }); 

    app.AcquisitionsController = AcquisitionsController; 
    app.acquisitionsController = AcquisitionsController.create(); 
})(window.App); 

find()remove()職能的工作蠻好的,我的觀點得到更新。

但是,當我從我的模板中調用addDuration作爲{{action}}時,雖然該函數執行且對象已保存,但未更新該視圖。

我認爲,鑑於在某種程度上觀察我的控制器的all財產,因爲我已經設置爲我出口的content,它看起來像當我添加和刪除的項目也被觀察到,但不是當其中的項目改變。

我該如何解決這個問題?

編輯

這裏是什麼addDuration應該做一點解釋。

我使用ember-resource,有這麼一個model,而不是,我有一個resource,具體如下:

var Acquisition = Ember.Resource.define({ 
    url: '/images/api/acquisition', 
    schema: { 
    id: String, 
    date: Date, 
    number: Number, 
    duration: Number 
    } 
}); 

這允許無縫集成與我的CRUD API,與ember-resourcefetch()save()方法。

最初,duration屬性是null,並在我的模板,我做的:

{{#if acquisition.duration}} 
    <tr> 
    <th>{% trans "Duration" %}</th> 
    <td>{{view Ember.TextField valueBinding="acquisition.duration"}}</td> 
    </tr> 
{{/if}} 

然後,我有一個按鈕來添加duration屬性,像這樣:

{{#unless acquisition.duration}} 
    <li><a href="#" {{action addDuration acquisition}}>{% trans "Add duration" %}</a></li> 
{{/unless}} 

因爲我正在檢查null,在{{#if acquisition.duration}}那裏,最初,durationTextField不會顯示出來。所以我希望用戶點擊Add duration按鈕,這將創建一個TextField的效果。

理想情況下,該字段將是空的,但現在我滿足於初始值1,僅僅因爲我認爲這會更容易。所以在我的action中,我試圖更新當前的acquisition對象,以便duration屬性設置爲1

回答

1

我有點困惑你的addDuration函數。但它看起來像你需要呼籲obj.set('duration', 1);而不是obj.duration = 1.

+0

我已經添加了一個大的編輯,其中我解釋了'addDuration'函數並顯示更多的代碼。不幸的是,你的建議不起作用,因爲'obj'沒有'set'方法。 –

+0

它不適合我的原因是我沒有使用模型,而只是資源。我編寫了一個模型,並將它連接到資源,現在'set'方法起作用。 –

相關問題