在新对象上的Restangular extendModel

时间:2014-08-25 19:58:38

标签: restangular

Restangular提供了一个功能extendModel,它允许您向从服务器返回的对象添加功能。有没有办法将这些方法添加到尚未保存到服务器的空/新模型中?

1 个答案:

答案 0 :(得分:2)

我想做同样的事情,但没有找到一个例子。以下是我最终如何做到这一点:

models.factory('User', function(Restangular) {
    var route = 'users';
    var init = {a:1, b:2}; // custom User properties
    Restangular.extendModel(route, function(model) {
        // User functions
        model.myfunc = function() {...}
        return model;
    });
    var User = Restangular.all(route);
    User.create = function(obj) {
        // init provides default values which will be overridden by obj
        return Restangular.restangularizeElement(null, _.merge({}, init, obj), route);
    }
    return User;
}

有些事情需要注意:

  • 使用像_.merge()这样的函数而不是angular.extend(),因为它克隆了init变量,而不是简单地分配它的属性。
  • Restangular 1.x存在一个已知问题,导致在修改其属性时不会更新Element的绑定数据(请参阅#367及相关内容)。解决方法是在调用save()之前再次调用restangularizeElement()。但是,此调用将始终从Server设置为false,这会导致发送POST,因此我编写了一个包装函数,用于检查id是否为非null并将fromServer设置为true。