Ember.js:如何向View添加参数

时间:2013-01-28 16:02:42

标签: javascript ember.js handlebars.js

我想这很简单,但作为Ember新手,我找不到解决方案......

所以让我说我有这个非常简单的观点:

MyApp.MyTextView = Ember.View.extend({
    template: Ember.Handlebars.compile('{{value}}')
});

我想使用此视图以显示同一对象的两个不同属性。这听起来像我想在调用'我的视图时添加参数。 在第二个视图中,我希望能够执行以下操作(假设我的内容对象是Person:{firstName:'toto',lasName:'titi'}):

MyApp.AnotherView = Ember.View.extend({
    template: Ember.Handlebars.compile('FirstName: {{view MyApp.MyTextView value="content.firstName"}} - LastName: {{view MyApp.MyTextView value="content.lastName"}}')
});

我还试图按照here的说明使用Handlebars助手,但它不起作用(当我使用{{highlight firstName}}或{{highlight content.firstName}}时显示的是firstName或content。 firstName,而不是属性值...)

你们有什么想法吗?我被困在这里......

谢谢!

1 个答案:

答案 0 :(得分:14)

要将参数传递给视图,您可以像这样指定每个参数:

{{view App.MyView firstNameBinding="content.firstName" lastNameBinding="content.lastName"}}

允许你这样做:

template: Ember.Handlebars.compile('{{view.firstName view.lastName}}');

但是,您可以想象,当您添加更多属性时,这将会非常。因此,您只需将content对象作为context传递(但您不需要将其作为上下文传递 - 尽管那是另一天):

{{view App.MyView contextBinding="content"}}

(请注意,contextBinding是特殊的,并会更改视图中的上下文。)

这样,视图将保存您传入的对象,因此在您的视图中,您现在可以执行以下操作:

template: Ember.Handlebars.compile('{{firstName lastName}}');

(你可以这样做,因为content现在是你视图的上下文。)

我已经敲了你一个快速的JSFiddle来解释(希望!):http://jsfiddle.net/YVCrq/