durandal入门套件搜索功能和IE浏览器

时间:2013-06-27 15:34:20

标签: knockout.js durandal

我已经使用了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()始终是未定义的。我在我的制作应用程序中遇到了同样的问题,但是能够通过这个简单的案例重现它。我在这里缺少什么?

2 个答案:

答案 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添加到数据绑定中,以便在表单提交之前记录更改。

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

答案 1 :(得分:0)

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

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

解决方法是告诉knockout在每个键关闭后绑定值:

<input type="text" name="searchValue" data-bind="value: searchValue, valueUpdate: 'afterkeydown'"/>