2

正如您从我的问题中可以看出的那样,我正在慢慢学习 EmberJS。我已经阅读了伟大的路线指南,我觉得已经准备好迎接这个世界,但后来......

在我的示例中,我认为将呈现 {{somethingView}} 而不是控制器属性 {{somethingCtrl}}。这是正确的行为吗?如果是这样,您将如何从 Ember.View 呈现属性?

JS

window.App = Ember.Application.create({
    ready: function() {
        this.initialize();
    }
});


window.App.Router = Ember.Router.extend({
    root: Ember.Route.extend({
        index: Ember.Route.extend({
            route: '/',
            connectOutlets: function(router) {
                var controller = router.get('applicationController');
                controller.connectOutlet('garments');
            }
        })
    })
})

window.App.ApplicationView = Ember.View.extend({
    templateName: 'application',
});

window.App.ApplicationController = Ember.Controller.extend();


window.App.GarmentsController = Ember.Controller.extend({
    somethingCtrl: "Something in the controller"
});

window.App.GarmentsView = Ember.View.extend({
    templateName: 'garments',
    somethingView: "Something in the view"
});​

DOM 的东西

<script type="text/x-handlebars" data-template-name="application">
  <h1>Hi Ember</h1>
    {{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="garments">
  <h1>Garments</h1>
    {{somethingView}}<br>
    {{somethingCtrl}}
</script>

​</p>

小提琴

4

1 回答 1

4

这种行为是正确的。这些是我对这些 ember 核心概念的理解:

  • 模型:这些对象代表您的应用程序处理的日期。这些是构成应用程序域模型的业务对象。
  • 控制器:控制器负责提供对模型的访问。控制器具有属性内容,应该在其中注入模型(Ember.Controller 的单个对象和 Ember.ArrayController 的对象数组)。控制器将此内容传递给您的视图。Controller 是视图的默认上下文。因此,您描述的行为是预期的。
  • 视图:视图仅用于显示问题。我个人主要用它来做jQuery动画。

但是仍然可以访问模板中的视图实例。您只需在模板中使用名称为“view”的变量。我用一个工作示例更新了你的小提琴:http: //jsfiddle.net/jPK8A/5/

<script type="text/x-handlebars" data-template-name="garments">
  <h1>Garments</h1>
    {{view.somethingView}}<br>
    {{somethingCtrl}}
</script>

但要明确:最常见的情况应该是从控制器访问内容。您不应该经常访问视图的变量。您希望在您的应用程序中显示日期,并且此日期驻留在模型中,因此应通过控制器访问。最可能的情况是,您想在视图中存储标签或类似的东西(必须计算的标签)。

于 2012-11-29T11:25:54.857 回答