【问题标题】:Breeze Project - Null Fields RemovedBreeze 项目 - 已删除空字段
【发布时间】:2015-06-06 07:23:45
【问题描述】:

如果我运行微风投影查询:

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 为 NULL,我将取回一个没有 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}“消息:无法处理绑定”文本: 函数(){返回 B}" 消息:“B”未定义

我错过了什么吗?如何在结果中获得值为 null 的 B 和 C?

【问题讨论】:

    标签: knockout.js breeze


    【解决方案1】:

    这是您的情况,以 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);
    

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

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

    【讨论】:

    • 好的,但我原以为微风会返回值为 null 的字段。如果知道 value = null 很重要怎么办?对于一点 0 或一串空字符串是否也一样?
    • 而且,查询实体不能以这种方式工作。如果你查询一个实体,没有投影,没有客户端模型类,你仍然会得到一个带有空字段的微风.实体。
    • 我只能说这段代码在learn.breezejs.com 网站上是有效的。
    • @user 重点是,我对 Breeze 仅有粗略的经验,但我对 Knockout 的使用方式相当了解。这就是我在回答的最后一段中表达的观点。无论最终使用哪种方法将数据加载到您的视图模型中——无论是 Breeze 还是纯 JSON 或 REST Web 服务或任何东西——您都需要一个可靠的视图模型首先。 Breeze 究竟如何返回实体本质上是肤浅的。您始终可以将传入数据调整到您的视图模型,只要该视图模型本身有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多