2015-03-07 2 views
1

Должно быть, мне не хватает чего-то действительно элементарного. У меня есть поле ввода, в которое введено имя списка. Затем имя сохраняется в Firebase.

При использовании $watch он работает нормально. Однако, если сделано через ng-keyup события, он возвращает следующее сообщение об ошибке

TypeError: undefined is not a function.

Что мне не хватает?

HTML:

<input id="which_list" ng-keyup="enterThis($event)" ng-model="which_list.name" >{{which_list.name}}</span> 

Контроллер:

$scope.which_list = sync.$asObject(); 

$scope.$watch('which_list.name', function() { 
    gDataService.which_list.name= $scope.which_list.name; 
    $scope.which_list.$save() // THIS WORKS 
           // $scope.which_list => d {$$conf: Object, $id: "id", $priority: null, name: "to1_list", $save: function…} 
    .then(function(){ 
     console.log($scope.which_list.name); 
    }); 
}); 

$scope.enterThis = function(event){ 
    if (event.keyCode === 13) { 
     gDataService.which_list.name= $scope.which_list.name; 
     $scope.which_list.$save(); // THIS DOESN't WORK 
            // $scope.which_list = Object {name:"list_name"} 

    } 
}; 

EDIT: В комментарии, я включил значение $scope.which_list показанного на контрольной точке.

+1

'undefined is not a function 'является JavaScripts эквивалентом исключения nullpointer. Вы пытались поставить точку останова внутри 'enterThis' и проверить это состояние в этой точке? –

+0

Да. Включено значение $ scope.which_list в комментарии выше. Я не понимаю, почему он становится простым объектом (вместо объекта синхронизации firebase) внутри функции enterThis. –

ответ

2

В настоящее время, пока вы меняете сферу действия which_list конвертируете в обычные старые объекты JavaScript (POJO), я считаю, что вам не нужно связывать 3-х сторон между переменной области и $asObject().

Код

var which_list = sync.$asObject(); 
// set up 3-way data-binding 
which_list.$bindTo($scope, "which_list"); 

Update

Кроме того, как вы используете $scope.which_list объект, который содержит имя и другие свойства, поэтому инициализировать его запуска контроллера как

$scope.which_list = {} 

Надеюсь, это может вам помочь, спасибо ,

+1

Да, оказалось, что я допустил ошибку при назначении {} в which_list по пути при использовании обработчика событий. Я исправил проблему, исправляя непреднамеренное задание, но я считаю, что ответ pankajparkar также исправил бы это. Благодарю. –

+0

@javvvva Я обновил ответ ... так что сделаю чек..отлично отредактировать .. Спасибо :) –

Смежные вопросы