0

我已经使用了 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 中,我使用以下代码添加了可观察的 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() 总是未定义的。我在我的生产应用程序中遇到了同样的问题,但能够用这个简单的案例重现它。我在这里想念什么?

4

2 回答 2

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>

您的输入框需要以 /> 结尾才有效。此外,将 valueUpdate 添加到您的数据绑定中,以便在您提交表单之前记录更改。

http://jsfiddle.net/gnKth/1/

于 2013-06-27T16:58:33.663 回答
0

显然这是 IE 的一个已知问题。https://github.com/knockout/knockout/issues/760 这是桑德森本人的小提琴。

http://jsfiddle.net/5StjB/1/

解决方法是告诉敲除在每个键按下后绑定值:

<input type="text" name="searchValue" data-bind="value: searchValue, valueUpdate: 'afterkeydown'"/>
于 2013-06-27T18:31:27.393 回答