Breeze 项目 - 已删除空字段

Breeze Project - Null Fields Removed

如果我运行一个breeze投影查询:

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]); });

并假设 table 中的行 B 和 C 为 NULL,我将返回一个没有 B 和 C 的 object。

{
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?

这是您的情况,以 Northwind sample database that is available for interactive testing at 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);

关键是你需要一个实际的视图模型首先。您不是在编写 breeze 代码,而是在编写 Knockout 代码,而 Breeze 只是用数据填充视图模型的一种方式。

因此,如果您的视图需要属性 ABCD,您需要先创建一个提供它们的视图模型。确保您的视图适用于空视图模型。只有在那之后你才能转向用数据填充它们的任务。