将视图模型属性绑定到输入文本框时,它会在IE中崩溃

时间:2013-06-10 21:45:45

标签: javascript asp.net-mvc asp.net-mvc-4 knockout.js internet-explorer-8

这是IE8崩溃时的错误消息。

Unhandled exception at 0x05A99E34 (mshtml.dll) in iexplore.exe: 0xC0000005: Access violation reading location 0x0000003C.

以下作品。

<tbody data-bind="foreach: searchResults">
    <tr><td data-bind="text: orgName"></td></tr>
</tbody>

但IE8上的以下崩溃(适用于IE10,FF和Chrome)。                   

orgName只是vm.searchStakeholder中设置的字符串。

以下是有关视图模型的更多信息。

var Stakeholder = (function () {
    function Stakeholder(orgName) {
        this.orgName = ko.observable(orgName);
    };
    return Stakeholder;
})();

var vm = new function () {
    var self = this;
    self.searchResults = ko.observableArray();

    self.searchStakeholder = function (){
        $.ajax({
             type:'get',
             dataType: 'json',
             url: 'the-url',
             contentType: 'application/json',
             success: function(json){
                 for(var i = 0; i < json.SearchResults.length; i++) {
                     var x = json.SearchResults[i];
                     self.searchResults.push(new Stakeholder(x.orgName));
                 }
             }
        });            
    };

});


ko.applyBindings(vm, $('#divMyApp')[0]);

1 个答案:

答案 0 :(得分:0)

假设您获得了类型利益相关者的一些结果并将其存储在searchResults中 -

<table data-bind="with: searchResults">
    <th><tr>
        <td>Name</td>
        <td>Org Name</td>
    </tr></th>
    <tr data-bind="foreach: stakeholder">
        <td data-bind="text: name"></td>
        <td>
            <input type="text" data-bind="value: orgName" />
        </td>
    </tr>
</table>

适用于IE8。但是因为你的searchResults是一个KO.observableArray(),我认为你需要预先搜索你的searchResults,但是没有更好的描述你正在做的事情,这很难说,无论如何这都是。

<table>
    <th><tr>
        <td>Name</td>
        <td>Org Name</td>
    </tr></th>
    <tr data-bind="foreach: searchResults">
        <td data-bind="text: name"></td>
        <td>
            <input type="text" data-bind="value: orgName" />
        </td>
    </tr>
</table>

我也无法告诉orgName是什么或如何传递给Stakeholder的构造函数,如果它是KO.observable然后将其作为参数删除并使用orgName(),如果它是传入的参数然后将其移动到父函数并重命名以确保它不是循环引用。

var Stakeholder = (function (organizationName) {
    var self = this;
    function Stakeholder() {
        this.orgName = ko.observable(self.organizationName);
    };
    return Stakeholder;
})();

最后,不确定&#39;等等&#39;元素在底部,也许只是复制面食错字?