Почему я получаю сообщение об ошибке: «.isValid()» не является функцией?

#javascript #backbone.js

#javascript #backbone.js

Вопрос:

Я пытаюсь проверить модель, вызываемую Book на основе доступности атрибута, с помощью этого видео. Я пытаюсь следовать инструкциям о том, как проверить Backbone.js модель, но когда я иду проверять ее экземпляр, вызванный myBook с помощью .isValid() метода, он возвращает ошибку:

 Uncaught TypeError: myBook.isValid() is not a function
 

Вот мой код:

 <script src="https://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
<script src="https://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
<script language="Javascript">
  var Book = Backbone.Model.extend({
    validate: function(attrs) {
      if (!attrs.title) {
        return "What's a book without a title?!";
      }
    }
  });

  var myBook = new Book();
  /* validation is run in browser */
</script>
 

Это было похоже на то, что было в видео, связанном выше. Когда я захожу в консоль и запускаю .isValid() метод, он возвращает указанную ошибку.

Комментарии:

1. Сообщение об ошибке понятно. MyBook — это не то, что вам нужно, а понять, зачем нам нужен код.

2. прочтите сообщение об ошибке, функция не определена.. где это объявляется. вставь какой-нибудь код, чувак

Ответ №1:

Было бы трудно помочь вам, если бы вы не предоставили пример кода, в котором есть ответ.

У Backbone 0.3.3 isValid пока нет.

Он был добавлен в Backbone 0.9.1, но был удален в 0.9.9.

Он был улучшен и добавлен обратно в 1.0.

После обновления Backbone и связанного с комментарием about h.has is not a function вам также необходимо выполнить обновление underscore.js как _.has было добавлено в 1.3.1.

Вам действительно следует использовать последнюю стабильную версию библиотек для вашего проекта, поскольку вы избежите подобных несовместимостей.

Комментарии:

1. О, спасибо. Я никогда не смотрю спецификации для версии библиотеки. Мне придется использовать новую версию Backbone.

2. Хорошо, я запустил этот же код с Backbone 1.0, теперь я получаю странную ошибку от самой версии, в которой говорится, h.has is not a function. что происходит?

3. @ObinnaNwakwue между 0.3.3 и 1.0 было много изменений. Поскольку вы проходите процесс обновления, я бы посоветовал вам сразу же использовать последнюю версию (1.3.3).

4. @ObinnaNwakwue Кроме того, на этот вопрос был дан ответ: если вы столкнулись с новой проблемой, сначала попробуйте ее решить, а затем, если все остальное не удается, задайте новый вопрос. Кстати, вам также необходимо обновить подчеркивание, так как _.has функция была добавлена в 1.3.1

5. Спасибо. Я прошу прощения за то, что не решил эту проблему самостоятельно. В следующий раз мне нужно посмотреть спецификации для версии библиотеки.