2014-10-02 84 views
1

我想學習如何使用淘汰賽,但還沒有找到我想要實現的簡單示例。我只是想要將我的mvc Model類中的List綁定到我的viewModel中以進行挖空。例如,如果我有下面的模型..這是一個類文件。Knockout JS可觀察陣列和模型綁定

public class PropaneMaintModel 
{ 
    public List<PropaneMaintAssignment> PropaneMaint{get;set;} 
    public List<string> LocationIds { get; set; } 
    public int? SelectedLocation { get; set; } 
} 

public class PropaneMaintAssignment 
{ 
    public int StoreNumber { get; set; } 
    public int Tanks { get; set; } 

    [Required(ErrorMessage="Tank Size must have a value")] 
    [Range(0,10000,ErrorMessage="Tank Size must be between 0 and 10000.")] 
    public int TankSize { get; set; } 
} 

如何獲取列表「PropaneMaint」與淘汰賽的綁定?我需要添加/從列表中刪除像敲除網站的例子。我的viewmodel定義如下,但它不起作用。

function propaneMaintViewModel() { 
    var viewModel = this; 

    viewModel.PropaneMaint = ko.observableArray([]); 
    viewModel.addNew = function() { 
     viewModel.PropaneMaint.push(
      { 
       StoreNumber: 0, 
       Tanks: 0, 
       TankSize: 0 
      } 
     ); 
    } 
} 

ko.applyBindings(new propaneMaintViewModel()); 
+0

你是否在某處創建了一個'propaneMaintViewModel'的新實例?調用'ko.applyBindings(propaneMaintViewModel());'看起來不對。你應該在其他地方構建一個'propaneMaintViewModel',並在'ko.applyBindings'中使用它或者調用'ko.applyBindings(new propaneMaintViewModel());'。 – 2014-10-02 14:09:22

+0

我不是,但我同意只爲參數添加「新」。關於頁面標記,我只是簡單地用一些按鈕爲每個循環做一個剃鬚刀。我看到了一個淘汰賽的foreach示例,但它不適用於從模型中填充的列表。 – user1732364 2014-10-02 14:12:12

回答

0

敲除沒有直接綁定到任何c#模型。你可以做的是將你的MVC視圖模型序列化爲一個json對象,然後綁定它。 IE:

function bindModels(arr) { 
    var propaneMaintAssignments = new Array(); 
    for (var i = 0; i < arr.length; i++) 
     propaneMaintAssignments.push(new PropaneMaintAssignment(arr[i])); 
    return propaneMaintAssignments; 
} 

function PropaneMaintAssignment(model) { 
    for(var property in model) 
     this[property] = model[property]; //bind all properties 
} 

var json = @Html.Raw(new JavaScriptSerializer().Serialize(Model.PropaneMaint)); //results in an array 
var list = bindModel(json); //makes an array of named objects 
viewModel.PropaneMaint(list); //adds that array of named objects to your observableArray 
+0

嗯有趣,它是有意義的解釋每一步的評論..我不知道爲什麼敲除的例子使用數據綁定=「foreach:列表」?適用於什麼情境?爲什麼它不適用於此? – user1732364 2014-10-02 15:07:45

+0

我只注意到你正在使用KnockoutMVC;我並不完全熟悉那個庫,因爲我只是使用基本的knockout.js和mvc。 foreach綁定爲數組中的每個值做了一些操作。這個小提琴顯示了一個例子:該例子中的http://jsfiddle.net/LkqTU/19585/列表應該只是viewmodel屬性名稱來迭代。 – 2014-10-02 19:34:36

+0

正確,我終於可以讓它工作了。我使用了一種稍微不同的方法,它只綁定了我的模型的列表屬性與整個模型。感謝:D – user1732364 2014-10-03 13:22:56