John Papa的single page app jumpstart tutorial增加了一个名为" isPartial"通过微风确定整个实体是否已加载到缓存中。当我使用Breeze.WebApi版本1.1.3的教程运行它时,一切运行正常。但是,我现在正在使用VS 2013的HotTowel Visual Studio模板(版本1.1)运行教程,我发现在breeze(版本1.4.1)获得"未捕获TypeError时保存实体的问题:boolean不是功能"在breeze.debug.js第15124行。
有问题的一行是试图访问" isPartial"实体上的财产:
proto.getProperty = function(propertyName) {
return this[propertyName]();
};
早期版本和现在版本之间的区别在于" isPartial"属性附加在构造函数中,如下所示:
metadataStore.registerEntityTypeCtor(
'Session', function () { this.isPartial = false; }, sessionInitializer);
...该属性是" ko.dependentObservable"。在较新的版本中,它是一个简单的属性。我的猜测是微风引起问题的原因。实际上,似乎当实体首次加载时," isPartial" property也是dependentObservable(并且保存可以正常工作)。但是,在此之后的某个时间它变成了一个简单的属性。
这是一个有效的前一个值的chrome调试镜头。
这是一个不起作用的Chrome调试镜头。
感谢您提供任何线索!
答案 0 :(得分:0)
答案 1 :(得分:0)
必须有另一种解释。您会在DocCode sample, entityExtensionTests.js中看到与您类似的示例。例如:
test("add unmapped 'isPartial' property via constructor", 6, function () {
var store = cloneModuleMetadataStore();
var Customer = function () {
// These are simple 'field' properties.
// Breeze converts them to the right kind of properties
// for the prevailing modelLibrary adapter
// such as KO observable properties.
this.CustomerID = testFns.newGuidComb();
this.isPartial = true;
};
store.registerEntityTypeCtor('Customer', Customer);
var em = newEm(store);
var cust = em.createEntity('Customer');
assertExpectedCustomerCtorProperties(cust);
});
function assertExpectedCustomerCtorProperties(cust) {
var custType = cust.entityType;
ok(custType,"'cust' is now an entity");
// Breeze converted both into KO observables
ok(typeof cust.CustomerID === 'function',
"'CustomerID' should be a KO observable");
ok(typeof cust.isPartial === 'function',
"'isPartial' should be a KO observable");
if (!custType) {return;} // no remaining tests would pass
var propInfo = custType.getProperty('CustomerID');
ok(propInfo && !propInfo.isUnmapped && propInfo.isPartOfKey,
"'CustomerID' should be detected as a mapped property");
propInfo = custType.getProperty('isPartial');
ok(propInfo && propInfo.isUnmapped,
"'isPartial' should be an unmapped property");
var unmapped = custType.unmappedProperties;
ok(unmapped.length === 1,
"'isPartial' should be the lone unmapped property");
}
你的第二个屏幕截图显然是与第一个不同的实体,因此它无法说服问题在于微风。
我强烈推荐有关扩展实体的文档,特别是有关自定义构造函数和初始化程序中属性之间差异的解释。
IMO,出于您的目的,您需要构造函数中的isPartial
属性