好像我在学习Ember.js的时候被困住了。
这可能是我极大地滥用了组件,或者我遗漏了一些小东西--不管是哪种方式,请帮助我!
以下是我想要的:
arrangedContent而不是模型)我有三个问题:
filterString值中。keyPress后面完成的,所以表最初是空的。在按下键之前,我该如何填充表?this.set('filteredItems', items)的调用没有反映对表的更改。我试过使用propertyWillChange和propertyDidChange,但仍然没有成功。filterString和filteredItems也包含在组件中是很好的,但我怀疑这是不可能的。我想的更多是为了便于携带。以下是jsbin:http://emberjs.jsbin.com/qicuq/1/edit
模板
<script type="text/x-handlebars" data-template-name="components/filter-input">
{{input type="search" placeholder="Filter..." value=value}}
</script>
<script type="text/x-handlebars" data-template-name="index">
{{filter-input value=filterString}}
<br/>
<table border=1>
<tr>
<th>System Name</th>
<th>Owner</th>
</tr>
{{#each item in filteredItems}}
<tr>
<td>{{item.name}}</td>
<td>{{item.owner.username}}</td>
</tr>
{{/each}}
</table>
</script>js
App.IndexController = Ember.ArrayController.extend({
filterableProperties: ['name', 'owner.username'],
filteredItems: [],
filterString: null,
});
App.FilterInputComponent = Ember.Component.extend({
arrangedContentBinding: 'controller.arrangedContent',
filterStringBinding: 'controller.filterString',
filteredItemsBinding: 'controller.filteredItems',
filterablePropertiesBinding: 'controller.filterableProperties',
keyPress: function() {
var items = this.get('arrangedContent');
console.log('-------------');
console.log('items ' + items);
console.log('value ' + this.get('value'));
console.log('filterString ' + this.get('filterString'));
console.log('valueBinding ' + this.get('valueBinding'));
console.log('filterableProperties ' + this.get('filterableProperties'));
// filter 'items' here by the value of 'filter-input' and whether or not the property is in the filterableProperties list
console.log('filteredItems-before ' + this.get('filteredItems'));
//this.propertyWillChange('filteredItems');
this.set('filteredItems', items);
//this.propertyDidChange('filteredItems');
console.log('filteredItems-after ' + this.get('filteredItems'));
},
});在输入框中键入'a‘时,控制台输出
"-------------"
"items [object Object],[object Object]"
"filterString null"
"value null"
"valueBinding Ember.Binding<ember274>(_parentView.context.filterString -> value)"
"filterableProperties name,owner.username"
"filteredItems-before "
"filteredItems-after [object Object],[object Object]"谢谢各位,任何帮助都会很感激的。
发布于 2014-07-12 10:05:39
通过以下修改,我能够让搜索为您工作:
App.IndexController = Ember.ArrayController.extend({
filteredItems: function() {
var content = this.get("content");
var filterString = this.get("filterString");
if (filterString) {
return content.filter(function(item) {
return item.name.indexOf(filterString) === 0;
});
} else {
return content;
}
}.property("filterString"),
filterString: null
});
App.FilterInputComponent = Ember.Component.extend({
filterStringBinding: 'controller.filterString',
keyUp: function() {
this.set("filterString", this.get("value"));
}
});这是JsBin小提琴!
我希望这能回答你的问题。
https://stackoverflow.com/questions/24707555
复制相似问题