Jquery 使用knockout.js处理viewmodel中的实体

Jquery 使用knockout.js处理viewmodel中的实体,jquery,knockout.js,Jquery,Knockout.js,我正在学习knockout.js。我有一个基本的网页,允许用户添加和编辑实体。为了避免重复,我想在视图模型中定义一个实体实例,就像Silverlight中一样 <input id="orderQuantity" type="text" data-bind="value:order.quantity" /> <input id="orderPrice" type="text" data-bind="value:order.price" /> <select id="o

我正在学习knockout.js。我有一个基本的网页,允许用户添加和编辑实体。为了避免重复,我想在视图模型中定义一个实体实例,就像Silverlight中一样

<input id="orderQuantity" type="text" data-bind="value:order.quantity" />
<input id="orderPrice" type="text" data-bind="value:order.price" />
<select id="orderType" data-bind="options:orderTypes">

var viewModel = {
  order: ko.observable(null),
  orderTypes: ko.observableArray(['Priority', 'Express', 'Normal' ]),

  init: function(o) {
    // Determine if we're working with an existing order, or a new one.
    if (o == null) {
      this.order(null);
    }
    else {
      this.order(new order(o));
    }
  }
};

$().ready(function () {
    ko.applyBindings(viewModel);
});

// The following is defined in a seperate .js file. 
// I've verified its getting called by using an 'alert'
var order = function(o) {
  this.id = o.id;
  this.quantity = o.quantity;
  this.price = o.price;
  this.orderType = o.orderType;
}

var viewModel={
顺序:ko.可观察(空),
订单类型:ko.observearray(['Priority','Express','Normal']),
初始化:函数(o){
//确定我们使用的是现有订单还是新订单。
如果(o==null){
本订单(空);
}
否则{
本命令(新命令(o));
}
}
};
$().ready(函数(){
应用绑定(视图模型);
});
//以下内容在单独的.js文件中定义。
//我已经通过使用“警报”验证了它是否被调用
变量顺序=函数(o){
this.id=o.id;
此数量=o数量;
这个价格=o价格;
this.orderType=o.orderType;
}
我的问题是,当我调用init时,我注意到创建了订单。但是,与订单关联的值不会绑定在表单元素中。我如何使这个表单工作?我想要菊花链,这样我可以保持我的类定义分开,以便我可以重复使用它们


谢谢大家!

不确定这是否是对您来说最好的解决方案,但我已经准备好了

有两个问题-

  • 通过使订单成为可观察的,那么您的引用需要是order().quantity,而不是像您这样的order.quantity。当你把秩序作为一个可观察的东西时,你必须把它作为一个函数来引用
  • 我会像对待小提琴一样改变你的数据模型。在您的示例中,由于订单模型中的每个对象都不是由可观察对象组成的,因此屏幕上的任何更新都不会反映在数据模型中
  • 希望这能满足你的需要