основа toJSON с помощью вспомогательных методов - PullRequest
1 голос
/ 22 ноября 2011

У меня есть базовая модель с атрибутами и некоторыми вспомогательными методами, которые выводят что-то кроме фактического атрибута (например, для форматирования).

Однако, когда я вызываю toJSON, возвращаются только атрибуты, поэтому мои шаблоны усов не могут получить доступ к этим вспомогательным методам. Есть ли способ решить эту проблему? Или я должен использовать другой подход?

Является ли единственный способ обойти это, чтобы создать отформатированную версию атрибута и обновлять ее при каждом изменении атрибута?

Ответы [ 2 ]

6 голосов
/ 22 ноября 2011

Хорхе, я бы расширил toJSON в своем собственном методе и дал бы этому новому добавленному json шаблон.

примерно так:

var userModel = Backbone.Model.extend({
    initialize: function(){
        _.bindAll(this, 'fullname', 'toFullJSON');
    },
    fullname: function(){
        return this.get('name') + " " + this.get('lastname');
    },
    toFullJSON: function(){
        var json = this.toJSON();
        return _.extend(json, {fullname : this.fullname()});
    }
});

var user = new userModel();
u.set({name: 'John', lastname: 'Doe'});

// you will see in this console log, that the toFullJSON function returns both the toJSON properties, and your added propert(y)(ies)...
console.log(u.toFullJSON());
0 голосов
/ 22 ноября 2011

Убедитесь, что JSON указан правильно.Если вы возвращаете объекты, в них могут быть некоторые обратные ссылки (они не поддерживаются в JSON и, вероятно, будут опущены).

...