【问题标题】:Ember Computed Property Listener ceases to function after first successful returnEmber Computed Property Listener 在第一次成功返回后停止运行
【发布时间】:2015-02-03 21:37:03
【问题描述】:

我在使用 Ember 计算属性时遇到问题:似乎一旦模板更新,它就会停止侦听依赖属性中的更改。但我不明白为什么会这样。

这是我的模板:

{{input type="text" value=searchText placeholder="Search for users..."}}
    <br>
    <ul>
      {{#each user in searchResults}}
        <li>{{user.Handle}}</li>
        {{else}}
        <p>No users found.</p>
      {{/each}}
    </ul>

下面是我的控制器:

    App.AutocompleteController = Ember.Controller.extend({
    searchText: null,
    searchResults: function () {
        var searchText = this.get('searchText');
        var data = { 'searchTerm' : searchText };
        var self = this;
        alert("Calling searchResults");
        if (!searchText) { return; }
        if (searchText.length < 2) { return; }
        $.get('/searchUsers', data).then(function (response) {
                self.set("searchResults", JSON.parse(response));
            }); //end then
    }.property('searchText')
});

第一次 searchResults 实际进行 AJAX 调用并返回数据时,会填充自动完成结果,但在那之后,直到我刷新客户端,searchResults 才会再次被调用。

【问题讨论】:

    标签: templates ember.js properties controller


    【解决方案1】:

    没关系。它就在代码中。在成功的 ajax 代码中,我将 searchResults 重新分配给静态数组,不再是函数。

    但是,返回将无法使用 .then,因此我仍然需要一种解决方法来返回数据。为此,我将添加一个更传统的 Ember 事件侦听器来调用我的“搜索”函数,该函数将重置“搜索结果”的属性

    新模板:

        {{input type="text" value=searchText placeholder="Search for users..." action=search on='change'}}
    
    <ul>
      {{#each user in searchResults}}
        <li>{{user.Handle}}</li>
        {{else}}
        <p>No users found.</p>
      {{/each}}
    </ul>
    

    新控制器:

    App.AutocompleteController = Ember.Controller.extend({
    searchText: null,
    search: function () {
        var searchText = this.get('searchText');
        var data = { 'searchTerm' : searchText };
        var self = this;
        if (!searchText) { return; }
        if (searchText.length < 2) { return; }
        else {
        $.get('/searchUsers', data).then(function (response) {
                self.set("searchResults", JSON.parse(response));
            }); //end then
        }
    }.property('searchText')
    

    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多