Understanding Models/Controllers/Templates with ember.js
我正在尝试学习 ember.js,但很难在这一切之间建立联系。我已经浏览了 ember.js 上提供的教程,但还是有点困惑。
模型包含将保存在服务器上的数据。控制器可以访问模型的数据并可以对其进行装饰(添加其显示数据)并将其发送到模板本身。
在示例中,他们使用路由类来实际从模型中获取数据。他们将路线与模型相关联,然后调用 .find() ,然后 find() 会返回模型中的数据列表。
在我的示例中我只使用了一条路线:
我的问题是:
任何示例都会有所帮助...我一直在搜索,在大多数情况下,它们处理的是一个简单的情况,即一个控制器与一个模型相关联,而控制器与一个模板相关联。如果模板想要使用多个控制器会发生什么?
参考 Mike 的 Template to multiple controllers 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | //index.html <script type="text/x-handlebars" id="index"> {{#each App.menuController}} {{title}} {{/each}} // app.js App.ChatController = Ember.Controller.extend({ getMessage: function() { alert("getMessage Called"); } }); App.MenuOption = Ember.Object.extend({ title: null, idName: null }); App.MenuController = Ember.ArrayController.create({ content:[], init : function() { // create an instance of the Song model for(var i=0; i<menuOptions.length; i++) { console.debug(menuOptions[i]); this.pushObject(menuOptions[i]); } }, getTest: function() { alert("getTest Called"); } }); //router.js App.Router.map(function () { this.resource('index', { path: '/' }); }); App.IndexRoute = Ember.Route.extend({ model: function () { return ['a','b', 'c' ]; }, setupController: function(controller, model) { controller.set('content', model); }, }); App.IndexController = Ember.Controller.extend({ needs:"index" }); |
从上面可以看出,我有一个路由"索引"。在默认索引模板中,我试图弄清楚如何调用多个控制器的操作。在这种情况下,我想调用属于 App.ChatController 的 "getMessage"
How do you grab data from the model from the controller
默认情况下,路由的模型(路由的
Can a controller get data from more then one model? If so, how is this done?
是的,这是可能的。可以通过路由的
If the controller has more then one function associated with it, how do you trigger the right one within the template.
控制器功能通过把手
Any examples would help... I've been searching around and in most cases they deal with the simple case where there is one controller linked with one model and the controller is linked with one template.
很难找到这样的例子是因为它不是最佳实践。当然,可以将一个控制器链接到多个模型或使用多个控制器的模板,但这不是一个好主意。
What happens if the template wants to use more then one controller?
从技术上讲,这可以通过使用全局变量来完成,但请不要这样做。控制器非常轻量级。每个模板都有它自己的控制器。如果模板需要来自其他控制器的数据,那么它的控制器应该使该数据可用。这可以通过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | {{each message in messages}} {{message.username}}: {{message.text}} {{/message}} {{input valueBinding="text"}} <button {{action send}}>Send</button> App.ChatController = Ember.Controller.extend({ needs: ['messages', 'currentUser'], messagesBinding: 'controllers.messages' send: function() { var message = App.Message.createRecord({ username: this.get('username'), text: this.get('text') }); message.save(); this.set('text', ''); } }) |