对于漫长而复杂的标题感到抱歉,但我无法更好地总结它。
我有一个简单的模型,其属性为foo
,初始化为null
。
在我看来,我不想在foo
为null
或""
时显示输入字段,并且有一个显示添加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
,则输入字段会在他们有时间输入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
,而''
会表现得好像属性已设置且有效。