淘汰javascript对象问题

时间:2014-12-15 20:52:41

标签: asp.net knockout.js

我坚持使用绑定javascript对象来淘汰可观察数组的方法。我正在使用asp.net。我在从ajax调用javascript对象中分配响应数据时迷失了。

我的aspx页面

<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;

2 个答案:

答案 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()