【问题标题】:Breezejs Extending EntitiesBreezejs 扩展实体
【发布时间】:2013-09-28 04:14:05
【问题描述】:

我对 Breezejs (1.4.2) 有疑问 q (0.9.7) 我想为实体添加计算属性。

var doctorInitializer = function (doctor) {
    doctor.FullName = ko.computed(function () {           
        return doctor.FirstName() + " " + doctor.MiddleName() + " " + doctor.LastName() + " " + doctor.SurName();           
    });
};

var doctorName = '/breeze/polyclinic', 
doctorManager = new breeze.EntityManager(doctorName);
var store = doctorManager.metadataStore;
store.registerEntityTypeCtor("Doctor", null, doctorInitializer);

我尝试向构造函数添加计算出的淘汰赛

var doctor = function () {
  self.FullName = ko.computed( {
    read: function() {
       return self.FirstName + " " + self.MiddleName + " " + self.LastName + " " + self.SurName;
    },
    deferEvaluation: true
  });
};
store.registerEntityTypeCtor("Doctor", doctorInitializer);

在这两种情况下,只有当我删除括号但 MiddleName 和 SurName 不是必需的并且我得到 null 而不是空字符串时才有效

这是我遇到的错误http://screencast.com/t/bP9Xnmf9Jm

更新

我尝试在控制台日志中添加错误并按照您的示例进行操作,但我有同样的错误不是函数http://screencast.com/t/bQTyV8XGD0Pk

 doctor.FullName = ko.computed(function () {
        var fullName = "";
        fullName += doctor.FirstName();
        if (doctor.FirstName()) {
            fullName += ' ' + doctor.FirstName();
        }
        fullName += ' ' + doctor.LastName();
        if (doctor.SurName()) {
             fullName += ' ' + doctor.SurName();
        }
        return fullName;
    });

var query = breeze.EntityQuery.from("Doctors").orderBy("Id")
doctorManager.executeQuery(query)
.then(function (data) {                    
    self.doctors.removeAll();
    self.doctors(data.results);
 })
 .fail(function(error) {
     console.log(error);
 });

希望有人能帮助我

【问题讨论】:

标签: breeze


【解决方案1】:

您在屏幕截图中看到的错误是因为您的查询引发了您未处理的错误。在 entityQuery 的末尾附加一个 .fail(failFunction)。

如果没有附加姓氏函数,则不能调用医生.姓氏()。调用 doctor.Surname 只会返回一个不给你值的函数。

很可能,您不会 100% 了解它为什么不起作用,因为您不了解 Knockout 的工作原理。你可能还不明白我上面描述的意思。您需要先了解 Knockout 的工作原理,然后再尝试学习 Breeze。

如果您只想让它工作而不了解如何或为什么将它放在那里并继续。这假设有一个名为 MiddleName 和 SurName 的属性返回,它们只是空的。

doctor.FullName = ko.computed(function () { 
    var fullName = "";
    fullName += doctor.FirstName();
    if (doctor.MiddleName()) { fullName += ' ' + doctor.MiddleName(); }
    fullName += ' ' + doctor.LastName();
    if (doctor.SurName()) { fullName += ' ' + doctor.SurName(); }
    return fullName
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多