有些时候,我的可观察搜索条款'没有更新。它绑定到输入字段。如果我没有为valueUpdate使用特殊值,这似乎不会发生。
我的控制台没有错误。
<div data-bind="visible: true" style="display: none">
<div class="search" style="clear:both;">
<input type="text" data-bind="value: searchTerm, valueUpdate: 'afterkeydown'" />
</div>
<!-- ko if: filteredGames().length > 0 -->
<div data-bind="foreach: filteredGames">
<a href="#" data-bind="click: $parent.loadGame">
<img data-bind="attr: {src: img}"/>
<span data-bind="text: name"></span>
<div class="play-game-btn">Play game</div>
</a>
</div>
<!-- /ko -->
<!-- ko if: filteredGames().length == 0 -->
<p>No games found</p>
<!-- /ko -->
</div>
这是我的viewmodel代码:
window.games = [{"name": "name1", "url": "http://example.com", "width": 100, "height":100}]; // usually comes from the server
function GamesViewModel() {
var self = this;
this.games = window.games;
this.noGames = ko.observable(false);
this.searchTerm = ko.observable('');
// this is to debug the binding itself. it logs something half the time.
this.searchTerm.subscribe( function( x ) {
console.log( x );
});
this.filteredGames = ko.computed( function() {
var filter = self.searchTerm().toLowerCase();
if (!filter) {
return this.games;
} else {
return ko.utils.arrayFilter(self.games, function (item) {
return item.name.toLowerCase().indexOf(filter) !== -1;
});
}
});
this.resetSearch = function() { this.searchTerm(null); };
this.loadGame = function() {
window.open( this.url, this.name, "width="+this.width+",height="+this.height );
}
}
ko.applyBindings( new GamesViewModel() );
这里可能会发生什么?
更多细节
仅在软刷新(Cmd-R)后才会发生这种情况。进行硬刷新(Cmd-Shift-R)使其工作。
答案 0 :(得分:0)
我在测试您的代码时在控制台中收到此错误:
未捕获错误:无法解析绑定。
消息:TypeError:无法读取属性&#39; length&#39;未定义;
绑定值:if:filteredGames()。length&gt; 0
当发生此错误时,&#34; searchTerm&#34;财产未更新。
尝试更改视图的此代码块:
<!-- ko if: filteredGames().length > 0 -->
对此:
<!-- ko if: filteredGames() && filteredGames().length == 0 -->
答案 1 :(得分:0)
这是由脚本冲突引起的。