【问题标题】:Saving a single object in query result在查询结果中保存单个对象
【发布时间】:2014-09-09 11:03:59
【问题描述】:

我已经声明了一个 AngularJS 服务来使用 django-tastypie 服务器:

MyApp.service('AppService', [ '$rootScope', '$resource', function ($rootScope, $resource) {
    return $resource("http://localhost:8000/api/v1/app/:id/", {'delete': false}, {
        query: { method: "GET", isArray: false, params: {
            limit: 1000
        } }
    });
}]);

然后,在this example 之后,我尝试保存单个对象但失败了:

var apps = AppService.query(function() {
    // Read results
    console.log(apps.objects[0].name);      <-- OK!

    // Change and save specific item
    var app = apps[0];                      <-- Undefined!
    app.name = 'Specific App';
    app.save();
});

我可以使用apps.objects 中的结果,但apps[0] 未定义。

如何在查询结果中保存特定项目? (official example似乎可以)

更新

我无法按照我想要的方式解决这个问题。相反,我这样做了:

var _app = AppService.get({id: $scope.selected_app.id}, function () {
    _app.attribute = app.attribute;
    _app.$save();
});

类似于 sss 解决方案。

【问题讨论】:

    标签: angularjs tastypie


    【解决方案1】:

    您可以尝试该解决方案,但最好的选择是从您的服务器而不是数组中只获取一个所需的对象。

    var apps = AppService.query(function() { // 读取结果 console.log(apps.objects[0].name);

        var app = new AppService();
        angular.extend(app, apps.objects[0]);                           
        app.name = 'Specific App';
        app.$save();
    });
    

    【讨论】:

    • 感谢 sss,但您代码中的 app.$save() 会生成 TypeError: undefined is not a function。 apps.objects 中的每个元素都不支持 $save。
    • @Michael 试试 apps.$save()
    • 感谢 sss,但apps.$save() 将发布整个结果集,而我想发布此集中的特定对象。
    【解决方案2】:

    您的代码明确表示您不想要一个数组作为结果:

    isArray: false
    

    【讨论】:

    • 感谢 benek,但即使我删除了这个选项(默认为 isArray: true),结果也不是数组。
    • 在这种情况下,唯一可能是您的 API 不返回数组。因为您正确使用了其他所有内容(query/GET/isArray:true)。
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2014-01-13
    相关资源
    最近更新 更多