2013-03-19 81 views
0

当我刷新页面时,出现正确的值。我希望提交表单时自动更新'gists'列表。提交表单时数据未绑定

全局@todone是这样设置的,因为我将它设置为'todone'时收到一个未定义的错误。它可能不相关。

app.factory "To_done", ["$resource", ($resource) -> 
    $resource("/to_dones", {}, {update: {method: "PUT"}}) 
] 

@MainCtrl = ["$scope", "To_done", ($scope, To_done) -> 
    $scope.to_dones = To_done.query() 

    $scope.addTodone = -> 
    @todone = To_done.save($scope.newTodone) 
    $scope.to_dones.push(@todone) 
    $scope.newTodone = {} 
] 


<div ng-controller="MainCtrl"> 
    <form ng-submit="addTodone()"> 
    <input type="text" ng-model="newTodone.gist"> 
    <input type="submit" value="Add"> 
    </form> 
    <ul> 
    <li ng-repeat="todone in to_dones"> 
     {{todone.gist}} 
    </li> 
    </ul> 
</div> 

回答

1

To_done.save($ scope.newTodone)是异步的。您需要注册一个回调函数来获取POST返回的值。

var todone = To_done.save($scope.newTodone, function() { 
    //success callback - optional 
    $scope.to_dones.push(todone); 
}, function() { 
    //error callback - optional 
}); 
$scope.newTodone = {}; 

如果您需要了解从服务得到的回答更多的信息,您可以添加参数的回调方法。更多细节在这里:http://docs.angularjs.org/api/ngResource。$ resource

+0

Works!提交表单后,附加值会短暂出现在列表后面,并在不到一秒钟内消失。这是相关的吗? – 2013-03-20 02:25:24

+1

我能够通过将“$ scope.to_dones.push(todone);”替换为“用“$ scope.to_dones = To_done.query()”。 – 2013-03-20 02:27:35