0

我对 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 不是必需的并且我得到空字符串而不是空字符串时才有效

这是我遇到的错误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);
 });

我希望有一个人可以帮助我

4

1 回答 1

0

您在屏幕截图中看到的错误是因为您的查询引发了您未处理的错误。在 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
});
于 2013-09-28T13:51:11.083 回答