2013-04-05 57 views
0

我使用的淘汰賽,並視圖模型綁定到我的ASP.Net MVC 4項目我的數據對象相當不錯,像這樣:淘汰賽與類範圍的屬性

$(document).ready(function() { 
properties = @Html.Raw(Json.Encode(Model)); 
selectedProperty = properties[0]; 
viewModel = { properties: ko.mapping.fromJS(@Html.Raw(Json.Encode(Model))), selectedProperty: ko.observable()}; 
viewModel.setItem = function(item) { 
viewModel.selectedProperty(item); 
} 
ko.applyBindings(viewModel); 

現在我想修改我的JavaScript,使該邏輯被封裝在類中:

RealEstate.Search = function (properties) { 
    this.properties = properties; 
    this.selectedProperty = this.properties[0]; 
    this.viewModel = { properties: ko.mapping.fromJS(this.properties), selectedProperty: ko.observable()}; 
    this.viewModel.setItem = function(item) { 
    viewModel.selectedProperty(item); 
    }   
    ko.applyBindings(this.viewModel); 
} 

而且我實例化對象在我的HTML頁面,如下所示:

$(document).ready(function() { 
search = new RealEstate.Search(@Html.Raw(Json.Encode(Model))); 
    } 

現在,我收到以下錯誤:
錯誤:無法解析綁定。 消息:ReferenceError:'properties'未定義; 綁定值:的foreach:性能

這裏是綁定到視圖模型表中的HTML剪斷:

<div id="divDataTable" data-bind="with: properties"> 

     <table id="dataTable" class="tablesorter"> 
      <thead> 
       <tr> 
        <th>Address 
        </th> 
        <th> 
         Suburb 
        </th> 
        <th>Price 
        </th> 
        <th>Beds 
        </th> 
        <th>Baths 
        </th> 
        <th>Days Listed 
        </th> 
       </tr> 
      </thead> 
      <tbody data-bind="foreach: properties"> 
       <tr data-bind="click: $root.setItem"> 
        <td> 
         <label data-bind="text: $data.Street"></label> 
         <input data-bind="attr: { value : $index(), id : $index(), name : $index() }" type="hidden" /> 
        </td> 
        <td data-bind="text: $data.Suburb"></td> 
        <td data-bind="text: $data.PriceFormatted"></td> 
        <td data-bind="text: $data.NumOfBedrooms"></td> 
        <td data-bind="text: $data.NumOfBathrooms"></td> 
        <td data-bind="text: $data.DaysListed"></td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</section> 
<div id="divProperty"> 
    <aside class="float-right" data-bind="with: selectedProperty"> 
     <table> 
      <tr> 
       <td> 
        <label data-bind="text: $data.Street"></label> 
       </td> 
       <td> 
        <label data-bind="text: $data.PriceFormatted"></label> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="2"> 
        <img src="#" /></td> 
      </tr> 
      <tr> 
       <td>Beds: 
       <label data-bind="text: $data.NumOfBedrooms"></label> 
       </td> 
       <td>On OZMite: 
       <label data-bind="text: $data.DaysListed"></label> 
       </td> 
      </tr> 
      <tr> 
       <td>Baths: 
       <label data-bind="text: $data.NumOfBathrooms"></label> 
       </td> 
       <td>Year built:</td> 
      </tr> 
     </table> 
    </aside> 

我將不勝感激,如果有人可以什麼我做錯了一些線索。

+0

你確定你使用正確的視圖模型正確的看法?因爲你的代碼應該工作,實際上它可以工作:http://jsfiddle.net/xY7Gx/。您應該在'ko.applyBindings'之前註銷'this.viewModel'來查看viewmodel內部的內容。 – nemesv 2013-04-05 04:55:01

+0

感謝您的提示。我現在有一些功能工作,並認爲它是包含我的表的div中的with:屬性屬性導致了問題。我已經更新了我的問題中的HTML ..你能否看看爲什麼with:屬性會破壞? – 2013-04-05 05:10:45

回答

1

對於data-bind="with: properties",您已經在div中的properties屬性的「上下文」中。

因此,當您編寫<tbody data-bind="foreach: properties"> KO會嘗試在properties陣列中查找properties屬性。

您需要的是用於參考當前binding context$data

所以你的foreach應該是這樣的:

<tbody data-bind="foreach: $data">  
    ... 
</todby> 
+0

這樣做。感謝您幫助我理解with:語句的運作方式。我非常喜歡這個社區如何支持這個框架。你們都搖滾! – 2013-04-05 09:03:51