2014-06-06 40 views
0

John Papa的single page app jumpstart tutorial向其實體添加了名爲「isPartial」的屬性,以確定整個實體是否已被微風加載到緩存中。當我使用Breeze.WebApi版本1.1.3的教程運行這個時,一切運行良好。但是,我現在正在使用VS 2013的HotTowel Visual Studio模板(版本1.1)運行該教程,並且看到保存實體的問題,其中breeze(版本1.4.1)在「Uncaught TypeError:boolean不是函數」 breeze.debug.js線15124.breeze.js爲什麼不將屬性映射爲依賴的觀測值?

有問題的行正試圖訪問該實體的「isPartial」屬性:

proto.getProperty = function(propertyName) { 
     return this[propertyName](); 
    }; 

早期版本之間的區別,現在是,當「isPartial 「屬性附加在構造函數中,如下所示:

metadataStore.registerEntityTypeCtor(
     'Session', function() { this.isPartial = false; }, sessionInitializer); 

...該屬性是「ko.dependentObservable」。在較新的版本中,它是一個簡單的屬性。我的猜測是這是微風造成的問題。實際上,當實體首次被加載時,「isPartial」屬性也是一個dependentObservable(並且保存可以正常工作)。但是,在此之後的某個時候,它變成一個簡單的屬性。

這是一個前值工作的chrome調試鏡頭。 enter image description here

這是一個鉻調試鏡頭後,不起作用。 enter image description here

感謝您的任何線索!

+0

嘗試升級到breeze.js版本> = 1.4.4。在[文檔](http://www.breezejs.com/documentation/download#144)它說版本1.4.4解決了敲除包裝錯誤 –

回答

0

嘗試將breeze.js升級到版本> = 1.4.4。

the doc它說,1.4.4版解決了淘汰賽包裝錯誤:

Fixed a bug with ES5 props in knockout not always being wrapped properly.

+0

好主意!我更新到1.4.4,然後更新到1.4.13沒有任何區別。 (還是)感謝你的建議。 –

+0

@MikeWitt值得一試!沒有進一步的信息很難得到想法。當你一步一步地運行教程或者你是否適應自己的情況時,你會遇到這個問題嗎? –

+0

第一遍(工作),我一步一步跟着教程。在這個過程中,我替換了其他想法(不同實體),但概念是相同的。我可以採取第一次通過,並將其nuget包升級到更新的版本(儘管原始版本是Durandal 1.0,而新版本是2。0所以這會增加一些努力)。再次感謝。 –

0

必須有另一種解釋。您會在​​中看到類似於您的示例。例如:

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屬性在構造函數

相關問題