2014-10-02 55 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