我已经使用了durandal入门套件并尝试使用搜索框。 在shell.html中,我更改了输入框以对searchTerm进行数据绑定:
<form class="navbar-search pull-right" data-bind="submit:search">
<input type="text" class="search-query" placeholder="Search" data-bind="value:searchTerm">
</form>
然后在shell.js中我添加了带有以下代码的observable searchTerm:
define(function(require) {
var router = require('durandal/plugins/router'),
app = require('durandal/app');
var searchTerm = ko.observable();
return {
searchTerm: searchTerm,
router: router,
search: function() {
app.showMessage('Search for ' + searchTerm() + ' not yet implemented');
},
activate: function () {
return router.activate('welcome');
}
};
});
此代码适用于除IE(9和10)之外的所有浏览器(嗯,Chrome,Firefox,Safari)。问题是对于IE,searchTerm()始终是未定义的。我在我的制作应用程序中遇到了同样的问题,但是能够通过这个简单的案例重现它。我在这里缺少什么?
答案 0 :(得分:2)
<form class="navbar-search pull-right" data-bind="submit:search">
<input type="text" class="search-query" placeholder="Search" data-bind="value:searchTerm, valueUpdate: 'afterkeydown'" />
</form>
您的输入框需要以/&gt;结尾有效。另外,将valueUpdate添加到数据绑定中,以便在表单提交之前记录更改。
答案 1 :(得分:0)
显然这是IE的已知问题。 https://github.com/knockout/knockout/issues/760 这是桑德森本人的小提琴。
解决方法是告诉knockout在每个键关闭后绑定值:
<input type="text" name="searchValue" data-bind="value: searchValue, valueUpdate: 'afterkeydown'"/>