【问题标题】:Ember.js: Relationship between view input and modelEmber.js:视图输入和模型之间的关系
【发布时间】:2014-04-14 15:37:34
【问题描述】:

我是 Ember.js 的新手,但精通 MVC 和 Backbone(甚至 cocoa 和 smalltalk),但出于某种原因,Ember 坚持其高度模糊和不一致的 API 使我无法理解 1)绑定和 2) 这与持久记录有何关系。

我有一个有输入的视图。我知道。我有一个属于控制器的模型。我知道。我不明白视图如何知道(或应该知道)控制器,并且我不明白当我准备将它推送到后端时模型如何将我输入到视图中的文本(表面上与.save())。这些应该是 Ember 喘不过气来抽象出来的样板样式的东西,但我发现我必须通过 Ember.js 源代码才能了解到底发生了什么。

我已经阅读了文档,他们的示例太做作以至于无法使用(仅提供最基本的示例,当我们谈论“雄心勃勃的网络应用程序”时,这是毫无意义的,ember 声称 为)。

需要注意的是,我们在内部使用了 ember-data,并且这个特定的路由有多个视图、控制器和模型。

【问题讨论】:

    标签: javascript model-view-controller ember.js ember-data


    【解决方案1】:

    假设您在索引模板中有一个输入:

    <script type="text/x-handlebars">
         {{input type="text" value=name}}
    </script>
    

    Ember 自动将App.IndexController 绑定到此模板,并将控制器的 name 属性绑定到输入字段的 value 属性。随着输入中的值发生变化,它将在控制器中自动更新。当您准备好将其保存在模型中时,您可以在操作中访问该属性。

    App.IndexController = Ember.ObjectController.extend({
        actions: {
            save:function() {
                var name = this.get('name');
                var model = this.store.createRecord('item');
                item.set('name',name);
                item.save();
            }
        }
    });
    

    这将触发对/items 的发布请求以存储该项目。

    如果您有更具体的示例,我可以尝试向您展示其工作原理。

    【讨论】:

    • 如果控制器不是路由的一部分怎么办?也就是说,它是一个存在于另一个控制器内部的控制器?
    • 第二个控制器从哪里来?如果您还没有,我真的建议您在 Google Chrome 中安装 Ember Inspector。在视图树中,您可以看到应用程序和关联控制器中的所有不同视图。
    • 我相信第二个(或包含)控制器是由路由实例化的。我会试试检查员。
    • 是的,主控制器将来自路由。但是子控制器来自哪里,它会链接到什么?
    • 子控制器由view实例化,在handlebars中实例化vis-a-vis{{view App.Foo}}。在App.Fooinit函数中,我有this.set('controller', App.BarController.create());
    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2011-09-03
    • 2015-06-06
    • 2010-11-20
    • 2015-02-26
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多