8

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

所以假设我有这个非常简单的观点:

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

我想使用这个视图来显示同一对象的两个不同属性。这听起来像是我想在“调用”我的视图时添加参数。在第二个视图中,我希望能够执行以下操作(假设我的内容对象是一个人:{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"}}')
});

我也尝试使用此处解释的 Handlebars 助手,但它不起作用(当我使用 {{highlight firstName}} 或 {{highlight content.firstName}} 时,显示的是 firstName 或 content.firstName,而不是属性值。 ..)

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

谢谢!

4

1 回答 1

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/

于 2013-01-28T16:29:57.587 回答