2013-08-22 128 views
2

如何將外部值傳遞到控制器。在下面的代碼中,我想將值filtertypefiltertermPostsController傳遞到PostsDynamicController。什麼是做到這一點的方法?如何將參數傳遞給控制器​​init方法?

我有這樣

<script type="text/x-handlebars" id="posts">    
        {{view Ember.Select 
        contentBinding="App.names.content" 
        valueBinding="App.names.selected" 
        }} 
        {{view Ember.TextField valueBinding="filterterm" }} 
        <button {{action "submit"}} > Submit</button> 
     {{outlet}} 
    </script> 

我App.js的部分模板是這樣的:

App.PostsController = Ember.ObjectController.extend({ 
    content: [], 
    filterterm: "", 
    submit: function() { 
     var filtertype = App.names.selected; 
     var filterterm = this.get('filterterm'); 
     this.transitionToRoute("posts.dynamicfinder"); 
    } 
}); 

App.PostsDynamicController = Ember.ObjectController.extend({ 
    init: function() { 
    //want access to filtertype and filterterm here so that I can pass them in find. i.e. 
    //App.Request.find(filtertype: filterterm); 
    this.set('model', App.Request.find(..); 
    } 
}); 

回答

1

你不能傳遞參數傳遞給控制器​​的init()函數。

要將外部值傳遞給控制器​​,您應該使用綁定。特別是控制器的needs屬性。看到餘燼導向dependencies-between-controllers

因此,例如:

// Change handlebars template to valueBinding="filtertype" instead of valueBinding="App.names.selected" 

// Also these should be ArrayControllers not ObjectControllers 

App.PostsController = Ember.ArrayController.extend({ 
    filterterm: null, 
    filtertype: null, 
    submit: function() { 
    this.transitionToRoute("posts.dynamicfinder"); 
    } 
}); 

App.PostsDynamicController = Ember.ArrayController.extend({ 
    needs: ['posts'], 
    termBinding: 'controllers.posts.filterterm', 
    typeBinding: 'controllers.posts.filtertype', 
    filteredPosts: function() { 
    var filtertype = this.get('type'); 
    var filterterm = this.get('term'); 
    // ... 
    }.property('term', 'type') 
} 

});

+0

如果'term'和'type'設置在那個末尾,那麼我將如何設置模型?在這種情況下,我想將模型設置爲:'.set('model',App.Request.find(type:term))' – Anthony

+0

如果有幫助,我在jsbin上有一個工作示例:http:// jsbin。 com/OcAyoYo/33 /編輯當一個下拉列表被改變,並且文本框的值被輸入並且點擊提交時,我想用'find(term:type)'模型向一個dynamicfinder請求' – Anthony

+0

我不認爲' App.Request.find(type:term)'按照您認爲的方式工作。它返回一個包含商店中每個「App.Request」的實時集合。然後(異步)它使用指定的查詢開始API請求。 API返回的任何對象都會添加到商店中,並出現在實況集合中。聽起來像你想要返回的是一個過濾的集合,所以只顯示匹配指定詞的記錄。 –

相關問題