2

Ember 1.0.0 RC3 提供了一个名为{{input}}. 除了更新底层控制器中的 String 属性外,我还想在输入发生变化时额外调用底层控制器上的方法。

有没有办法在更改{{input}}文本字段后调用控制器方法?

4

1 回答 1

3

使用.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(..)而使方法急切执行。

于 2013-06-10T01:46:27.147 回答