根据模型中的属性显示/隐藏Emberjs TextField时出现一些用户交互问题

时间:2012-09-23 17:21:51

标签: ember.js

对于漫长而复杂的标题感到抱歉,但我无法更好地总结它。

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

在我看来,我不想在foonull""时显示输入字段,并且有一个显示添加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之前消失。
  3. 这种用户互动有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

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

property 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);
}

因此,textfields的数量=数组的长度foo如果你需要保留textfield值的绑定,请按照以下方法:(再次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”数组....希望这有助于

答案 1 :(得分:0)

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

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

因此,在我的handlebars模板中,我可以这样做:

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

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