我坚持使用绑定javascript对象来淘汰可观察数组的方法。我正在使用asp.net。我在从ajax调用javascript对象中分配响应数据时迷失了。
<table id="gvActivityForm" class="test">
<th class="thdata">
TestSample
</th>
<tbody data-bind="foreach: arraytoadd">
<tr>
<td data-bind="text: testid"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var TemplateFunction = function()
{
var self = this;
self.testid= ko.observable(0);
} //end
RealFunction = function ()
{
var self = this;
self.arraytoadd = ko.observableArray([]); //Adding an array
self.addevent = function()
{
self.arraytoadd.push(new TemplateFunction());
}
} //end of javascript object
objRealFunction = new realFunction();
ko.applyBindings(objRealFunction);
我通过ajax调用获取数据。
$.ajax({ //start ajax call for posting and getting the data back
type: 'POST',
url: 'PopupWebService.asmx/ReceiveandSendJobActivity',
data: JSON.stringify({item:obj}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
for(var i=0;i<response.d.length;i++)
{
TemplateFunction.testid= response.d[i].TestId; //My question is how do I assign the data .I am lost here
}
脚本&GT;
答案 0 :(得分:0)
knockout observables被视为函数,因此为了设置observable的值,你不能使用常规赋值运算符语法,而是将新值作为参数传递给knockout observable函数:
TemplateFunction.testid(response.d[i].TestId);
答案 1 :(得分:0)
您还没有实例化您的&#39; TemplateFunction&#39;
的任何实例当您的数据从您的ajax调用返回时 - 使用您的objRealFunction对象执行类似的操作:
success: function (response) {
for(var i=0;i<response.d.length;i++)
{
var templateFunction = new templateFunction();
templateFunction.testId(response.d[i].testId);
objRealFunction.arraytoadd.push(templateFunction)
}
}
您还需要在observableArray的每个成员上预期名为testId的属性时更新您的视图。
您需要将html绑定更改为
foreach: arrayToAdd().templateFunction
因为你已经在templateFunction对象上将testId属性定义为ko.observable()