【发布时间】:2014-05-11 11:05:20
【问题描述】:
好的,让我先说我对 Ember 完全陌生。我正在度过一段有趣的时光,只是试图让一个基本的绑定工作。这是我的相关代码:
App.js
var App = Ember.Application.create({
rootElement: '#emberApp'
});
还有 routes.js:
App.Router.map(function () {
});
App.IndexRoute = Ember.Route.extend({
model: function () {
return { Foo: 3 };
}
});
然后这是我的 HTML 文档:
<div id="emberApp"></div>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/handlebars.js"></script>
<script src="~/Scripts/ember-1.4.0.js"></script>
<script src="~/Scripts/EmberApp.js"></script>
<script src="~/Scripts/Routes.js"></script>
<script type="text/x-handlebars" data-template-name="index">
<div>The current foo value: {{Foo}}</div>
{{input valueBinding=Foo}}
</script>
预期的结果是,当我在创建的输入字段中键入时,模板中绑定的值会同时发生变化。应该很简单吧?我必须错过一些东西。
模板正确呈现The current foo value: 3,并呈现一个文本字段。但是,在此字段中输入任何内容对上述绑定没有任何作用。我尝试用valueBinding 标签标记它,以及切换到Ember.TextField 而不是input 助手。我也尝试过创建一个自定义 Ember.Object.extend 类并将其作为索引路由的模型返回。
为了将文本框值绑定到模板中的 {{Foo}} 值,我缺少什么?
编辑 - 好的,我发现这是因为变量的大写:foo 有效,但 Foo 无效。这是为什么呢?
我希望收到类似于此的 JSON 结果:
{
RemoteUserId: 0,
UserPhotoUrl: '....',
RemoteUserName: 'Bob',
}
我假设这意味着我需要通过为每个元素制作控制器包装器来“隐藏”这些值?即:
remoteUserId: function() {
return this.get('RemoteUserId');
}.property()
【问题讨论】:
-
如果您使用的是 ember 数据,您可能希望在适配器级别进行处理。类似于 ams 适配器如何处理蛇壳和骆驼壳。如果您正在滚动自己的模型跟踪,则可能会采用类似的想法。
标签: javascript data-binding ember.js