2016-04-03 35 views
1

我是Ember.js的新手,在一項簡單的任務中不斷努力。我的目標是在觸發操作後實現頁面內容的實時更新。在這種情況下,我在Ember邏輯中對於路由 - 控制器 - 模型關係非常迷茫。更新Ember模型通過行動生活

所以我template.hbs是一樣的東西:

<h1>{{model.somedata}}</h1> 
<button {{action 'getContent'}}>Get Content</button> 

我控制器接受來自用戶的形式,一些PARAMS,使AJAX調用:

export default Ember.Controller.extend({ 
    somedata: 'hello', 
    actions: { 
     getContent: function() { 
      var self = this; 

      Ember.$.ajax({ 

       // ... standart call with some query data 

       success: function(result) { 
        self.set('somedata', result); 
       } 
      }); 
     } 
    } 
}); 

我的路徑模型,只返回控制參數,可以這樣,如果我在控制器屬性更新後進行正確的更新,必須有一個簡單的步驟來更新當前模型並顯示模板的所有更改。

export default Ember.Route.extend({ 
    model: function(params) { 
     return params; 
    } 
}); 

你們可以給我一個提示,這個過程是如何定期建立在Ember嗎?

+0

你在尋找「this.controller.set('somedata',result)」嗎? –

+0

是的,它似乎是這樣,但在這種情況下,模型將不會更新 – markoffden

+0

嘗試「this.currentModel.set('somedata',result)」 –

回答

1

您正在尋找self.set('model.somedata', results)

你現在的代碼是在控制器上設置somedata屬性,該屬性不影響任何內容。

+0

謝謝,會試試這個) – markoffden

+0

但是模型會更新生動嗎? – markoffden

+0

@markoffden這是Ember生活中的全部目的。 – 2016-04-04 13:52:02

1

呀這是一個有點混亂,這裏就是我想起來了......

首先灰燼設置的路線。

該路線有多個掛鉤用於獲取和處理模型(即beforeModel,model,afterModel之前)。 Ember將永遠尋找這些作爲它自以爲是的本性的一部分。

還有一個setupController掛鉤,將在所有模型掛鉤後觸發。作爲setupController鉤子的一部分,控制器將被創建並且模型將被傳遞給控制器​​。

一旦發生這種情況,我發現將模型視爲不再是路線的一部分,而是將控制器看作是有用的。

+0

謝謝,我會試着考慮這一點,你讓我對它更清楚 – markoffden

+0

說在技術上更準確*還有一個'setupController'掛鉤,它會在所有模型掛鉤之後觸發,並且在控制器被建造。通常(這是默認行爲),該鉤子使用已解析的模型*值填充控制器上的'model'屬性。 – 2016-04-04 13:48:24

0

控制器將被棄用。所以IMO 不要使用控制器

在您的路線中處理該行爲。如果將值綁定到由模型鉤子返回的對象,則在更新值時將更新數據和頁面。

export default Ember.Route.extend({ 
    somedata: null, 
    model: function(params) { 
     return { 
      params: params, 
      somedata: this.get('somedata') 
     }; 
    }, 
    actions: { 
     getContent: function() { 
      ... 
      var _this = this; 
      ... 
      success: function(result) { 
       _this.set('somedata', result); 
      } 
     } 
    } 
}); 
+1

非常感謝您的建議)) – markoffden