【发布时间】:2013-03-06 16:35:44
【问题描述】:
我正在尝试使用 Knockout JS 解决以下问题
- 需要通过“提交”绑定将 HTML 表单绑定到子视图模型
- 绑定到“提交”的回调方法是继承方法
以下代码将更好地解释上述场景。可以在this fiddle 中找到相同的内容。
function MasterViewModel() {
var self = this;
self.employeeViewModel = new EmployeeViewModel();
};
function EmployeeViewModel () {
var self = this;
self.empFirstName = ko.observable();
self.empLastName = ko.observable();
self.employeeList = ko.observableArray([]);
};
EmployeeViewModel.prototype.addEmployee = function () {
var self = this;
self.employeeList.push(new Employee(self.empFirstName(), self.empLastName()));
}
function Employee(firstNameParam, lastNameParam) {
var self = this;
self.firstName = ko.observable(firstNameParam);
self.lastName = ko.observable(lastNameParam);
}
ko.applyBindings(new MasterViewModel());
在 HTML 中,我使用如下所示的提交绑定;
<form data-bind="submit: employeeViewModel.addEmployee">
</form>
我观察到,为回调方法传递的“this”上下文始终是“MasterViewModel”的一个实例。我搜索了一种通过“提交”绑定传递不同上下文的方法,但徒劳无功。
这是我试图利用的限制吗?有解决方法吗?
谢谢。
【问题讨论】:
-
找到了答案。发现作为“提交”绑定(或任何绑定)的参数,您可以传递 JavaScript。因此,将绑定修改为;
<form data-bind="submit: function() {employeeViewModel.addEmployee.call(employeeViewModel, null)}"> </form>让你调用“call”方法