0

很抱歉标题冗长而复杂,但我无法更好地总结它。

我有一个简单的模型,带有一个属性foo,初始化为null.

在我看来,我不想在fooisnull或时显示输入字段"",并且有一个显示Add foo的按钮。

<a href="#" class="btn" {{action addFoo obj}}> Add foo </a>

{{#if obj.foo}}
  {{view Ember.TextField valueBinding="obj.foo"}}
{{/if}}

然后在我的行动addFoo中,我会:

obj.set('foo', 1);

这将使输入字段出现。

这种方法有两个问题:

  1. 1实际上是一个任意值,它在我的应用程序中没有任何特殊含义。
  2. 1如果用户因为想输入而删除2,输入字段将在他们有时间输入之前消失2

这种用户交互有更好的方法吗?

4

2 回答 2

0

我不确定我是否理解您的问题,但请检查一下,如果这是您需要的:

属性foo是一个长度为 0 的数组,即

foo: []

车把文件

<a href="#" {{action addTextField obj}} class="btn">Add Foo</a>
{{#each foo}}
  {{view Ember.Textfield}}
{{/each}}

添加文本字段:

addTextField: function(){
  obj.get('foo').pushObject(1);
}

因此,文本字段的数量=数组的长度foo如果您需要保留文本字段值的绑定,请使用以下方法:(再次obj.foo是一个空数组)

obj.textFieldView = Ember.CollectionView.extend({
  contentBinding: 'foo',
  itemViewClass: Ember.Textfield.extend({
    valueBinding: 'this.content'
  })
})

obj.addTextField = function(){
  obj.get('foo').pushObject("");
}

车把文件

<a href="#" {{action addTextField obj}} class="btn">Add Foo</a>
{{#collection obj.textFieldView}}
{{/collection}}

每当您单击“添加 Foo”时,都会添加一个新文本字段,并且您在文本字段中输入的任何内容都绑定到“foo”数组....希望这会有所帮助

于 2012-09-24T07:45:40.210 回答
0

我最终为我的模型添加了一个计算属性:

fooIsSet: function() { return this.get('foo') !== null }.property('foo')

所以在我的handlebars模板中我可以这样做:

{{#if obj.fooIsSet}}
  do stuff
{{/if}}

这样我只能处理null,并且''会表现得好像该属性已设置且有效。

于 2012-09-24T19:14:46.833 回答