Ember 1.0.0 RC3 提供了一个名为{{input}}
. 除了更新底层控制器中的 String 属性外,我还想在输入发生变化时额外调用底层控制器上的方法。
有没有办法在更改{{input}}
文本字段后调用控制器方法?
Ember 1.0.0 RC3 提供了一个名为{{input}}
. 除了更新底层控制器中的 String 属性外,我还想在输入发生变化时额外调用底层控制器上的方法。
有没有办法在更改{{input}}
文本字段后调用控制器方法?
使用.observes("propertyChangedByInputHelper")
对更改做出反应的控制器方法。
<--Handlebars template -->
<script type="text/x-handlebars" id="autocomplete">
{{input type="text" value=searchText placeholder="Search users..."}}
<table>
{{#each searchResults}}
<tr><td>
{{#linkTo "user" this}}
{{firstName}} {{lastName}}
{{/linkTo}}
</td></tr>
{{/each}}
</table>
</script>
.
//inside Ember application / app.js
App.AutocompleteController = Ember.ObjectController.extend({
searchText: null, // mutated by "autocomplete" Handlebars template
searchResults: Ember.A(), //initialize to empty array
searchForUsers: function() {
this.set("searchResults", Ember.A() ); // clear possibly non-empty array
var searchResultsBuilder = Ember.A();
//...
//... making modifications to searchResultsBuilder
//...
this.get("searchResults").addObjects(searchResultsBuilder);
}.observes("searchText")
});
注意:当searchText
发生变化时,a.property("searchText")
不足以触发searchForUsers
方法:.property(..)
使方法仅在需要时延迟执行,.observes(..)
而使方法急切执行。