2017-05-24 125 views
0

尝试向Firebase中的某一行提交更新时,出现错误TypeError: Cannot set property 'songname' of null。控制台错误是说它在编辑功能中与record.songname发生。我可以添加,但不能编辑行。提交的类型错误提交

myApp.controller('ProductsCtrl', ['$scope', '$firebaseArray', function($scope, $firebaseArray, $http){ 

    var myProducts = new Firebase('https://url-to-db.firebaseio.com/songs'); 

    $scope.products = $firebaseArray(myProducts); 

    $scope.showForm = function(){ 
    $scope.addFormShow = true; 
    $scope.editFormShow = false; 
    clearForm(); 
    window.scrollTo(0, 0); 
    } 

    $scope.hideForm = function(){ 
    $scope.addFormShow = false; 
    } 

    function clearForm(){ 
    $scope.songname = ''; 
    $scope.artist = ''; 
    $scopt.tags = ''; 
    } 

    $scope.addFormSubmit = function(){ 
    $scope.products.$add({ 
     songname:$scope.songname, 
     artist:$scope.artist, 
     tags:$scope.tags, 
     date:Date.now() 
    }); 
    $('.messages').addClass('alert alert-success').slideDown().show().html('The song has been added').fadeOut(2000); 
    clearForm(); 
    } 

    $scope.dateFormat = 'MM-dd-yy @ HH:mm:ss'; 

    $scope.showProduct = function(product){ 
    $scope.editFormShow = true; 
    $scope.addFormShow = false; 
    $scope.songname = product.songname; 
    $scope.artist = product.artist; 
    $scope.tags = product.tags; 
    $scope.date = product.date; 
    } 

    $scope.editFormSubmit = function(){ 
    var id = $scope.id; 
    var record = $scope.products.$getRecord(id); 
    record.songname = $scope.songname; 
    record.artist = $scope.artist; 
    record.tags = $scope.tags; 

    $scope.products.$save(record); 
    $('.messages').addClass('alert alert-info').slideDown().show().html('The job has been edited').fadeOut(2000); 
    clearForm(); 
    $('.edit-form').toggle(); 
    } 
}]); 

回答

0

$ scope.id属性可能没有设置。 尝试在您的showProduct函数的作用域中设置该标识或任何函数初始化该项目的$ scope变量。

$scope.showProduct = function(product){ 
$scope.id = product.id; 
.............. 
+0

我已经通过使用'var id = $ scope.id;'传递给getRecord()函数来提交编辑,这是错误显示的位置。 – Matt

+0

我的意思是$ scope.id属性中的值本身没有被设置在任何地方。所以,当你说'var id = $ scope.id'时,它所做的只是'var id = undefined' – CodeWarrior