2014-02-23 101 views
0

我刚开始使用knockout.js,并试图显示JSON数据时卡住了。Knockout applyBindings不适用绑定

我的HTML是

<p>Dealer Location: <input id="dealerlocation" data-bind="value: DealerLocation" /></p> 
<p>Contact Report Date: <input id="crdate" data-bind="value: CRDate" /></p> 

我的脚本块

function viewAction() { 
    var self = this; 
    self.DealerLocation = ko.observable(""); 
    self.CRDate = ko.observable(""); 
}; 

var viewActionModel = new viewAction(); 

function GetActionByID() { 
    $.ajax({ 
     type: "POST", 
     url: "/ws/someservice.asmx/GetAction", 
     data: "{pacid: '" + $('input[id$=hidActionID]').val() + "'}", 
     contentType: "application/json;charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
       var action = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d; 
       $.each(action, function (index, axn) {       
        viewActionModel.DealerLocation = axn.DealerLocation; 
        viewActionModel.CRDate = axn.CRDate;       
       }); 
      } 
     }); 
} 

$(document).ready(function() { 
    GetActionByID(); 
    //alert(viewActionModel.DealerLocation); 
    ko.applyBindings(viewActionModel); 
}); 

注:如果我取消通知,然后applyBinding工作,否则它没有。

这里缺少什么?

Ragards。

回答

2

这是分配观察值的错误方法。

viewActionModel.DealerLocation = axn.DealerLocation; 
viewActionModel.CRDate = axn.CRDate; 

这样做。

viewActionModel.DealerLocation(axn.DealerLocation); 
viewActionModel.CRDate(axn.CRDate); 

通过做你现在正在做的事情,你正在用常规变量替换observables。它正在处理警报,因为这个替换发生在绑定和敲除之前刚刚拿起你的常规变量。阅读更多关于观测值的信息。

+0

它现在完美的工作!但是当Alert()被放置在那里时,为什么它在错误的赋值中工作? – user3104116

+0

更新了我的答案。 – Anri

+0

谢谢;这对我来说绝对是必须的。 – user3104116