在模板 Ember Js 中动态添加视图
Adding view dynamically inside template Ember Js
单击按钮后,我希望将以下内容动态添加到模板中。
{{view App.DatalistText type="text"
value=test
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
<datalist id="names" value=te>
{{#each model}}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
有个div
<div id="container"></div>
当用户点击一个按钮时 div 的内容应该变成下面这样呈现一个数据列表
<div id="container">
{{view App.DatalistText type="text"
value=test
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
<datalist id="names" value=te>
{{#each model}}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
</div>
当我尝试使用
$("#container").append("{{view App.DatalistText type='text' value=test1 class='form-control' placeholder='Start Typing' list='names' size='50' }} <datalist id='names' value=te> {{#each model}} <option {{bindAttr value=name}}> {{/each}} </datalist>");
--这不起作用 - 数据列表不可见
必须有一些其他方法来动态添加它。
App.DatalistText = Ember.TextField.extend({
attributeBindings: ['list'],
list : null,
value:"names",
selected:function(){
alert(this.get('te'));
}
});
基本上每次用户单击按钮时我都想生成一个新的数据列表。
您应该尽可能避免自己玩 jQuery 和 DOM。 append
将不起作用,因为您添加的是文本而不是 HTMLbars 代码。
我不会直接回答你的问题,但会尝试找出更好的解决方案。您希望在用户每次单击按钮时显示 Datalist
视图 - 为什么?我假设您想将某种值绑定到此视图(在您的代码中它是 test
。但是如果您不在控制器中保存此绑定,您将如何对该值执行任何操作?更好的解决方案可能是创建某种Ember.Object
(或纯JS)的数组,它将存储绑定中的值。假设您在控制器中有以下属性:
myObjects: []
您可以这样处理按钮的点击操作:
actions:
handleClick: function() {
myObjects.pushObject({ value: '' }); # use pushObject to make it supported by Ember bindings system
}
然后,在您的模板中:
<div id="container">
{{each object in myObjects}}
{{view App.DatalistText type="text"
value=object.value
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
}}
<datalist id="names" value=te>
{{#each model}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
</div>
这样,每次myObjects
中的新对象出现时,模板引擎都会渲染视图。此外,您将可以通过访问 Ember.get(myObject[index], "value")
.
来访问用户提供的值
如果你想知道我为什么用pushObject
take a look here.
单击按钮后,我希望将以下内容动态添加到模板中。
{{view App.DatalistText type="text"
value=test
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
<datalist id="names" value=te>
{{#each model}}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
有个div
<div id="container"></div>
当用户点击一个按钮时 div 的内容应该变成下面这样呈现一个数据列表
<div id="container">
{{view App.DatalistText type="text"
value=test
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
<datalist id="names" value=te>
{{#each model}}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
</div>
当我尝试使用
$("#container").append("{{view App.DatalistText type='text' value=test1 class='form-control' placeholder='Start Typing' list='names' size='50' }} <datalist id='names' value=te> {{#each model}} <option {{bindAttr value=name}}> {{/each}} </datalist>");
--这不起作用 - 数据列表不可见
必须有一些其他方法来动态添加它。
App.DatalistText = Ember.TextField.extend({
attributeBindings: ['list'],
list : null,
value:"names",
selected:function(){
alert(this.get('te'));
}
});
基本上每次用户单击按钮时我都想生成一个新的数据列表。
您应该尽可能避免自己玩 jQuery 和 DOM。 append
将不起作用,因为您添加的是文本而不是 HTMLbars 代码。
我不会直接回答你的问题,但会尝试找出更好的解决方案。您希望在用户每次单击按钮时显示 Datalist
视图 - 为什么?我假设您想将某种值绑定到此视图(在您的代码中它是 test
。但是如果您不在控制器中保存此绑定,您将如何对该值执行任何操作?更好的解决方案可能是创建某种Ember.Object
(或纯JS)的数组,它将存储绑定中的值。假设您在控制器中有以下属性:
myObjects: []
您可以这样处理按钮的点击操作:
actions:
handleClick: function() {
myObjects.pushObject({ value: '' }); # use pushObject to make it supported by Ember bindings system
}
然后,在您的模板中:
<div id="container">
{{each object in myObjects}}
{{view App.DatalistText type="text"
value=object.value
class="form-control"
placeholder="Start Typing"
list="names"
size="50"
}}
}}
<datalist id="names" value=te>
{{#each model}
<option {{bindAttr value=name}}>
{{/each}}
</datalist>
</div>
这样,每次myObjects
中的新对象出现时,模板引擎都会渲染视图。此外,您将可以通过访问 Ember.get(myObject[index], "value")
.
如果你想知道我为什么用pushObject
take a look here.