Ember 已计算 属性 侦听器在第一次成功后停止运行 return
Ember Computed Property Listener ceases to function after first successful return
我在使用 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 调用和 returns 数据时,自动完成结果被填充,但之后,直到我刷新客户端,searchResults 才被再次调用。
没关系。它就在代码中。在成功的 ajax 代码中,我将 searchResults 重新分配给静态数组,不再是函数。
然而,返回不会在 .then 之外工作,所以我仍然需要一个返回数据的解决方法。为此,我将添加一个更传统的 Ember 事件侦听器来调用我的 'search' 函数,该函数将重置 'searchResults'
的 属性
新模板:
{{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')
});
我在使用 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 调用和 returns 数据时,自动完成结果被填充,但之后,直到我刷新客户端,searchResults 才被再次调用。
没关系。它就在代码中。在成功的 ajax 代码中,我将 searchResults 重新分配给静态数组,不再是函数。
然而,返回不会在 .then 之外工作,所以我仍然需要一个返回数据的解决方法。为此,我将添加一个更传统的 Ember 事件侦听器来调用我的 'search' 函数,该函数将重置 'searchResults'
的 属性新模板:
{{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')
});