Knockoutjs函数更新模型时应出现异常
Knockoutjs Function Expected Exception on updating model
经过大量的研究、跟踪和错误,我还没有想出解决方案。请帮忙!代码中的SearchCustomer方法对有效和无效的场景进行了注释。
情况
我在映射插件中使用了knockoutjs。我采用了一个视图模型,其中包含来自服务器的Workorder,它包含一些关于它的属性,以及下面的Customer模型和Customer下面的Contact模型。
在工单屏幕上,用户可以搜索客户,从而弹出模式搜索窗口。他们选择了该客户,客户的id和客户模型将返回到工作订单中。我更新工单的customerID没有问题,但当我尝试更新客户数据(包括联系人)时,我得到了Function Expected错误。
代码
function WorkorderViewModel(data) {
var self = this;
data = data || {};
mapping = {
'Workorder': {
create: function (options) {
return new Workorder(options.data, self);
}
}
}
ko.mapping.fromJS(data, mapping, self);
self.ViewCustomer = function () {
self.Workorder.Customer.View();
}
self.SearchCustomer = function () {
self.Workorder.Customer.Search(function (customerID, customer) {
self.Workorder.CustomerID(customerID); //Works
self.Workorder.Customer(customer) //Function Expected, I feel this should work! Please help!
self.Workorder.Customer = new Customer(customer, self.Workorder); //No Error doesn't update screen
self.Workorder.Customer.Contact.FirstName(customer.Contact.FirstName); //Works, updates screen, but I don't want to do this for every property.
self.Workorder.SaveAll(); //Works, reload page and customer data is correct. Not looking to reload webpage everytime though.
})
}
}
function Workorder(data, parent) {
var self = this;
data = data || {};
mapping = {
'Customer': {
create: function (options) {
return new Customer(options.data, self);
}
}
}
ko.mapping.fromJS(data, mapping, self);
}
function Customer(data, parent) {
var self = this;
data = data || {};
mapping = {
'Contact': {
create: function (options) {
return new Contact(options.data, self);
}
}
}
ko.mapping.fromJS(data, mapping, self);
}
function Contact(data, parent) {
var self = this;
data = data || {};
mapping = {};
ko.mapping.fromJS(data, mapping, self);
self.AddedOn = ko.observable(moment(data.AddedOn).year() == 1 ? '' : moment(data.AddedOn).format('MM/DD/YYYY'));
self.FullName = ko.computed(function () {
var fullName = '';
if (self.FirstName() != null && self.FirstName() != '') {
fullName = self.FirstName();
}
if (self.MiddleName() != null && self.MiddleName() != '') {
fullName += ' ' + self.MiddleName();
}
if (self.LastName() != null && self.LastName() != '') {
fullName += ' ' + self.LastName();
}
return fullName;
})
}
谢谢大家!
由于self.Workorder.Customer
最初是使用ko.mapping
填充的,因此当您想要重新填充它时,应该再次使用ko.mapping
,如:
ko.mapping.fromJS(customer, self.Workorder.Customer)
尝试更改:
self.Workorder.Customer(customer);
至:
self.Workorder.Customer = customer;
我的猜测是,工作订单的Customer属性不是可观察的。
相关文章:
- JS异常:animate不是一个函数
- Meteor:异步函数回调异常:onAfterAction
- 测试抛出异常的函数
- Tracker重新计算函数出现异常:无法读取属性'0'的未定义
- Jquery 函数创建一个异常的暂停
- 谷歌地图Javascript API“;未捕获类型异常-未定义不是函数“;
- Knockoutjs函数更新模型时应出现异常
- Javascript“不是构造函数”异常
- $mdDialog.prompt 抛出异常,但该函数在确认时工作正常
- 量角器 - 错误:第二次使用相同的函数时索引越界异常
- 属性不是函数异常
- 从 C# 执行 JS 代码的异常:预期函数
- 主干.js - n捕获异常:语法错误:函数构造函数:无法编译函数
- 异步函数的 JavaScript 回调:是否有任何模式可以区分“返回值”和“异常”
- JavaScriptCore:尝试将JS函数作为块传递给Objective-C,得到“TypeError”异常
- 使用 foreach 函数时的 JavaScript 异常
- 断言函数使用 Qunit 引发异常
- 如何断言函数不会引发异常
- Tracker afterFlush函数出现异常:使用Materialize模态未定义
- Prototype构造函数上下文中的JavaScript类型检查和异常