2014-01-15 2 views
1

Я настроенный механизм для определения классов в JavaScript, как показано ниже:Какова наилучшая практика использования пользовательских объектов в jayData?

Tools.User = Tools.Class.define("Tools.User", Tools.Entity, { 
    Id: { type: "int", key: true, computed: true }, 
    IsActive: { type: Boolean }, 
    IsAdmin: { type: Boolean }, 
    LName: { type: String }, 
    FName: { type: String }, 
    FullName: { get: function() { return this.FName + " " + this.LName; }, Type: String }, 
    init: function (name, lname) { 
     this.IsAdmin = false; 
     this.IsActive = true; 
     this.FName = name; 
     this.LName = lname; 
     Tools.Entity.call(this, arguments); 
    }, 
    onEndEdit: function() { 

     if (this.IsActive == false && this.IsAdmin == true) { 
      throw new Error(Messages.AdminCanNotBeDisabled); 
     } 

     this.parentClass.onEndEdit(); 

    }, 
    deActivate: function() { 

     if (this.IsAdmin == true) { 
      throw new Error(Messages.AdminCanNotBeDisabled); 
     } 

     this.IsActive = false; 
    } 
}); 

Как вы можете видеть, он поддерживает виртуальное/переопределение, авто реализованы свойства, конструктор и так далее.

Я хочу использовать свои собственные классы в JayData. Для этого я разработал следующие строки:

$data.EntityContext.extend("Tools.AppDb", { 
    Users: { type: $data.EntitySet, elementType: Tools.User } 
}); 

var appDb = new Tools.AppDb({ 
    provider: 'indexedDb', databaseName: 'AppDb' 
}); 

appDb.onReady(function() { 

}); 

Понятно, что невозможно работать с Jaydata таким образом. Но как я могу достичь этой цели с минимальными изменениями в моих кодах?

Я думаю, что сообщение об ошибке это не полезно, но это сообщение об ошибке:

Uncaught TypeError: Cannot call method 'getPublicMappedProperties' of undefined 

ответ

1

JayData может работать на JayData предприятиях с целью отслеживания изменений и сделать хранение-независимое управление данными возможно.

Так ElementType пользователей EntitySet должен быть получено от $ data.Entity:

$data.Entity.extend("Todo", { 
    Id: { type: "int", key: true, computed: true }, 
    Task: { type: String, required: true, maxLength: 200 }, 
    DueDate: { type: Date }, 
    Completed: { type: Boolean } 
}); 
+0

Спасибо за ваш ответ, я разработал несколько проектов, основанных на JayData, и я знаю, что его фундамент. Дизайн JayData очень хорош, но пока я хочу использовать свои собственные сущности, что я могу сделать? где это для начала? Есть ли какой-нибудь образец, если хотите, я могу наследовать свой класс Entity из класса $ data.Entity. С наилучшими пожеланиями. –

+0

если у меня есть var temp = new Todo (someData), как я могу получить имя ключа (это Id)? –