2017-06-21 46 views
1

我有這樣的看法:淘汰賽數據綁定到視圖模型

@model Store.WebUI.Models.CartIndexViewModel 

@{ 
    ViewBag.Title = "Your Cart"; 
} 

<script type="text/javascript" src="~/Scripts/knockout-3.4.2.js"></script> 
<script type="text/javascript" src="~/Scripts/knockout.mapping-latest.js"> 
</script> 
<script type="text/javascript"> 
    var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)); 
    var viewModel = ko.mapping.fromJS(data); 
    ko.applyBindings(viewModel); 
</script> 

<h2>Your cart</h2> 
<table id="cartTable" class="table"> 
    <thead> 
    <tr> 
     <th>Quantity</th> 
     <th>Item</th> 
     <th class="text-right">Price</th> 
    </tr> 
    </thead> 
    <tbody data-bind="foreach: Lines"> 
    <tr> 
     <td data-bind="text: Quantity"></td> 
     <td data-bind="text: Product.Name"></td> 
     <td data-bind="text: Product.Price"></td> 
    </tr> 
    </tbody> 
</table> 

,由於某種原因值不綁定表中的列,即使在Chrome的調試過程中,我可以看到變量「數據」中我的腳本看起來像這樣:

var data = {"Cart":{"Lines":[{"Product":{"ProductId":2,"Name":"Game","Description":"Some Game","Category":"Games","Price":29.99},"Quantity":1}]},"ReturnUrl":"/Games"}; 

我是新來敲除和jQuery一般,我不明白我在這裏失蹤。

回答

2

觀察你的對象結構:

{ 
    "Cart": { 
    "Lines": [...] 
    } 
} 

要注意的一點是,Lines是內Cart。既然你不告訴KO如何在那裏導航,屏幕上不會顯示任何內容。你可以這樣解決問題:

<table id="cartTable" class="table" data-bind="with: Cart"> 
    <thead> 
    <tr> 
     <th>Quantity</th> 
     <th>Item</th> 
     <th class="text-right">Price</th> 
    </tr> 
    </thead> 
    <tbody data-bind="foreach: Lines"> 
    <tr> 
     <td data-bind="text: Quantity"></td> 
     <td data-bind="text: Product.Name"></td> 
     <td data-bind="text: Product.Price"></td> 
    </tr> 
</tbody> 
</table> 

注意data-bind="with: Cart"綁定。這導致KO使用嵌入的Cart對象作爲綁定上下文,並且瞧,Lines成爲有效的引用。

您還需要從here下載KO Mapping插件或撥打ko.mapping.fromJS將失敗。

+0

OMG,這非常有道理! –

+0

等待,但不應該是viewModel.Cart?簡單的數據綁定到購物車似乎沒有做任何事情。 有沒有一種好的方法來調試視圖來跟蹤綁定的值? –

+0

它適用於我這個小提琴:https://jsfiddle.net/rzso11jL/然而,如果我像你一樣使用'ko.mapping.fromJS',我會遇到一個錯誤,如控制檯所示。就我個人而言,我從來沒有使用過這個幫手,所以我不能加太多。 –