2015-04-01 52 views
1

我辦一件輕而易舉的投影查詢:微風項目 - 空字段刪除

var item; 
breeze.EntityQuery 
.from("SomeTable") 
.where("Id", "==", id) 
.select("A, B, C, D") 
.using(myEntityManager).execute() 
.then(function(data) { item = ko.observable(data.results[0]); }); 

並說在表中的行,B和C是空的,我會回來的對象,而B和C.

{ 
A: "somevalue", 
B: "someothervalue" 
} 

在UI我:

<div data-bind="with: item"> 
<span data-bind="text: A" /> 
<span data-bind="text: B" /> 
<span data-bind="text: C" /> 
<span data-bind="text: D" /> 
</div> 

然後我得到的錯誤 -

ReferenceError: Unable to process binding "with: function(){return item}" Message: Unable to process binding "text: function(){return B}" Message: 'B' is undefined

我錯過了什麼嗎?如何在結果中得到B和C,其值爲null?

回答

0

這是你的情況,Northwind sample database仿照了可用於交互測試在http://learn.breezejs.com/

var myEntityManager = new breeze.EntityManager('api/northwind'); 

function Employee() { 
    this.FirstName = ko.observable(null); 
    this.LastName = ko.observable(null); 
} 
Employee.prototype.init = function (data) { 
    if (data) { 
     this.FirstName(data.FirstName); 
     this.LastName(data.LastName); 
    } else { 
     this.FirstName(null); 
     this.LastName(null); 
    } 
}; 
Employee.prototype.loadFromId = function (id) { 
    var self = this; 
    breeze.EntityQuery.from("Employees") 
    .where("EmployeeId", "==", id) 
    .select("FirstName, LastName") 
    .using(myEntityManager).execute() 
    .then(function (data) { 
     self.init(data.results[0]); 
    }) 
    .fail(function() { 
     self.init(null); 
     // also show or log error message 
    }); 
}; 

用法:

var viewModel = new Employee(); 
viewModel.loadFromId(1); 

ko.applyBindings(viewModel); 

關鍵的一點是,你需要一個實際的視圖模型第一。您不是在編寫微風代碼,而是在編寫Knockout代碼,而Breeze僅僅是爲視圖模型填充數據的一種手段。

所以,如果您認爲需要的屬性ABCD,你需要創建一個視圖模型:第一,爲他們提供。確保您的視圖適用於空視圖模型。只有在這之後,你才能完成填充數據的任務。

+0

好吧,但我會期待微風返回字段,值爲null。如果知道value = null是多麼重要?它是否對0或空字符串進行相同操作? – user210757 2015-04-01 16:53:04

+0

而且,查詢一個實體不會以這種方式工作。如果你查詢一個實體,沒有投影,沒有客戶端模型類,你仍然得到一個微風。存在空字段。 – user210757 2015-04-01 17:08:54

+0

我只能說這個代碼的工作原理與http://learn.breezejs.com/網站上的一樣。 – Tomalak 2015-04-01 17:26:07