Breezejs扩展实体

时间:2013-09-28 04:14:06

标签: breeze

我遇到了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);
 });

我希望有人可以帮助我

1 个答案:

答案 0 :(得分:0)

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

如果没有附加Surname功能,则无法调用doctor.Surname()。调用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
});