Источник данных YUI3 для возврата пользовательского объекта - PullRequest
0 голосов
/ 30 сентября 2011

Как я могу применить sendRequest YUI3, примененный к источнику данных, чтобы возвратить предопределенные объекты вместо простых?

Например, у меня есть этот базовый класс с его методами:

function Student(id, name){
   this.id = id;
   this.name = name;
}
Context.prototype.setId   = function(id){ this.id = id; };
Context.prototype.setName = function(name){ this.name = name; };
Context.prototype.getId   = function(){ return this.id; };
Context.prototype.getName = function(){ return this.name; };

И у меня есть этот код, который извлекает данные из API, нормализует их и возвращает данные в виде объектов:

var studApiDataSource = new Y.DataSource.Get({source: API_URL});

studApiDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
  schema: {
    resultListLocator: "response.student",
    resultFields: ["id","name"]
  }
});

var myCallback = function(e) {
  Y.Array.each(e.response.results, function(stud){
    Y.log(stud.id+' '+stud.name);
  }
}

studApiDataSource.sendRequest({
  request: "?cmd=getStudents",
  callback: {
    success: myCallback,
    failure: function (e) { }
  }
});

Массив объектов, полученных с помощью studApiDataSource.sendRequest () и переданных в myCallback, является обычными объектами со свойствами id и name. Однако я хочу, чтобы это были объекты Student, а также их функции-члены (getId, getName и т. Д.)

1 Ответ

1 голос
/ 01 октября 2011

Я не уверен, что полностью понимаю, но вы могли бы сделать что-то вроде следующего.

var studentJSON = "{\"id\": 17, \"name\":\"my name is\"}";
function Student(obj){
  this.name = obj.name;
  this.id = obj.id;
}
Student.prototype.setId   = function(id){ this.id = id; };
Student.prototype.setName = function(name){ this.name = name; };
Student.prototype.getId   = function(){ return this.id; };
Student.prototype.getName = function(){ return this.name; };

YUI().use('json-parse', 'json-stringify', function (Y) {

    try {

        var stud = new Student(Y.JSON.parse(studentJSON));
        alert(stud.getId());
    }
    catch (e) {
        alert(e);
    }

});
...