3
A
回答
9
我做了一個簡單的實現,使用Ember.Select
。
給在jsfiddle
模板一看:
<script type="text/x-handlebars" data-template-name="application">
<h1>Select country and cities</h1>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
{{view "select"
content=countries
optionLabelPath="content.name"
selection=selectedCountry
prompt="Select a country ..."}}
{{view "select"
content=currentCities
prompt="Select a city ..."}}
</script>
控制器:
App = Ember.Application.create({});
App.IndexController = Ember.ObjectController.extend({
selectedCountry: null,
currentCities: null,
countries: [
{
name: 'United States',
cities: ['Chicago', 'Miami']
},
{
name: 'Brazil',
cities: ['Sao Paulo', 'Rio de Janeiro']
}
],
selectedCountryChanged: function() {
this.set('currentCities', this.get('selectedCountry.cities'));
}.observes('selectedCountry')
});
2
在你的控制器,你可以做這樣的事情:
indications1a: Ember.A(),
indications1b: Ember.A(),
loadIndications: function (name, parentId) {
var self = this;
$.connection.ccprIndicationsToRevalidation.server.getAllByParentId(parentId)
.done(function (result) {
self.set("indications%@".fmt(name), result);
self.checkIfChildInChildren(name);
});
},
loadChildIndications: function (name1, name2) {
var parent = this.get('content.indication%@'.fmt(name1)),
parents = this.get('indications%@'.fmt(name1)),
childs = this.get('indications%@'.fmt(name2));
childs.clear();
if (!Em.isEmpty(parent) && !Ember.isEmpty(parents)) {
var indication = null;
parents.every(function (item) {
if (Em.isEqual(Ember.get(item, 'id'), parent)) {
indication = item;
return false;
}
return true;
});
if (!Ember.isEmpty(Ember.get(indication, 'hasChildren'))) {
this.loadIndications(name2, indication.id);
} else {
this.set('content.indication%@'.fmt(name2), 0);
}
}
},
checkIfChildInChildren: function (name) {
var child = this.get('content.indication%@'.fmt(name)),
childs = this.get('indications%@'.fmt(name));
var found = false;
childs.every(function (item) {
if (Em.isEqual(Em.get(item, 'id'), child)) {
found = true;
return false;
}
return true;
});
if (!found) {
this.set('content.indication%@'.fmt(name), 0);
}
},
indicationToRevalidation1aChanged: function() {
this.loadChildIndications('1a', '1b');
}.observes('content.indication1a', 'indications1a.length'),
hasNoIndications1b: function() {
return this.get('indications1b.length') === 0;
}.property('indications1b.length'),
在路線的setupController
controller.get('indications1a').clear();
controller.get('indications1b').clear();
controller.loadIndications('1a', null);
車把:
{{view Bootstrap.Forms.Select
label=false
contentBinding="controller.indications1a"
optionLabelPath="content.description"
optionValuePath="content.id"
valueBinding="controller.content.indication1a"}}
{{view Bootstrap.Forms.Select
label=false
contentBinding="controller.indications1b"
optionLabelPath="content.description"
optionValuePath="content.id"
disabledBinding="controller.hasNoIndications1b"
valueBinding="controller.content.indication1b"}}
+0
感謝。我會盡力適應我的需求。 – dangonfast
相關問題
- 1. 根據另一個下拉列表中的選擇填充下拉列表
- 2. 根據另一個下拉列表中的選擇填充下拉列表
- 3. Mysql根據另一個下拉選項填充下拉列表
- 4. 根據其他其他選擇下拉列表填充選擇下拉菜單
- 5. 基於GXT中另一個下拉列表的選擇填充下拉菜單
- 6. 根據另一個選擇填充一個下拉菜單然後重定向
- 7. 根據其他下拉列表的選擇填充一個下拉列表
- 8. 根據其他下拉列表的選擇填充一個下拉列表
- 9. 根據下拉選擇從數據庫填充另一個選擇下拉菜單
- 10. 根據在PHP中選擇的第一個下拉列表填充第二個下拉菜單
- 11. 根據另外2個下拉列表的選擇更改下拉菜單?
- 12. 動態填充從另一個下拉列表中選擇下拉列表
- 13. Yii填充另一個下拉列表中的下拉列表
- 14. (Angular 2)如何根據另一個下拉選項填充下拉列表
- 15. 從上一個下拉菜單中選擇動態填充下拉菜單
- 16. 如何根據上一個下拉選擇填充下拉列表SQL
- 17. 根據選定的項目填充選擇下拉菜單
- 18. 根據下拉選項填充列表
- 19. 根據另一個下拉列表填充下拉列表在邊jQuery
- 20. 如何根據asp.net中另一個下拉列表的選擇項填充下拉列表
- 21. 如何根據在另一個下拉列表中選擇的值填充下拉列表?
- 22. Laravel 5.4 - 基於另一個下拉選擇值填充下拉菜單
- 23. Django - 根據另一個下拉菜單限制下拉選項
- 24. 根據以前的下拉列表選擇填充下拉列表
- 25. 從ASP.Net Web窗體中的另一個下拉選擇填充下拉列表
- 26. 如何根據另一個下拉列表中的選項動態地填充下拉列表中的選項?
- 27. 根據另一個選擇下拉菜單篩選一個HTML選擇下拉菜單
- 28. Sharepoint 2007:根據下拉列表框1選擇填充下拉列表框2
- 29. MVC下拉列表填充另一個下拉列表
- 30. 從另一個下拉列表填充下拉列表
謝謝!我會試一試! – dangonfast
@Marcio Junior如果我需要在不同的地方使用它,該怎麼辦? – tvshajeer
如果您必須從所選國家的服務器獲取數據,該怎麼辦 – user2601010