Точно так же ответ Дерика Бэйли правильный, он просто использует метод инициализации вместо метода по умолчанию.

ействительно нравится Backbone, но мне тяжело делать то, что кажется простым. Я ценю любую помощь со следующим примером.

У меня есть модель Criteria, которую я хочу использовать для хранения состояния некоторых элементов в моем пользовательском интерфейсе. Есть пара простых атрибутов и один атрибут, который представляет собой массив идентификаторов, используемых для хранения идентификаторов тегов, выбранных пользователем в пользовательском интерфейсе.

Итак, я создаю новый экземпляр. Я добавляю некоторые элементы в массив тегов. Затем я хочу начать все заново, создать новый экземпляр, назначенный той же переменной. Но мой массив тегов по-прежнему содержит информацию, которую я добавил к нему как часть первого экземпляра Criteria.

Я задокументировал тестовый пример ниже.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test</title>
    <script src="Scripts/Libraries/jquery-1.6.1.js" type="text/javascript"></script>
    <script src="Scripts/Libraries/underscore.js" type="text/javascript"></script>
    <script src="Scripts/Libraries/backbone.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">

        $(function () {

            // Simple model to hold some state about my UI.
            var Criteria = Backbone.Model.extend({

                defaults: {
                    "status": "Normal",
                    "priority": "Normal",
                    "tags": new Array()
                }

            });

            // Create new criteria.
            window.criteria = new Criteria();

            // The length of the tags array should be 0. PASSES
            console.log("Expect 0: Actual " + window.criteria.get("tags").length);

            // Add a tag id to the tags array.
            window.criteria.get("tags").push(5); // Tag with ID of 5.

            // The length of the tags array should be 1. PASSES
            console.log("Expect 1: Actual " + window.criteria.get("tags").length);

            // Create a new instance of criteria.
            window.criteria = new Criteria();

            // The length of the tags array should be 0. FAILS
            // CONFUSED. I thought this is now a new instance with a new set of attributes.
            // Why does the tags collection still have an item in it.
            console.log("Expect 0: Actual " + window.criteria.get("tags").length);

            // OK. So, I will call the clear method on the model. This is supposed to remove all attributes
            // from the model.
            // Then, I will create it again.
            window.criteria.clear();
            window.criteria = new Criteria();

            // The length of the tags array should be 0. FAILS. Still 1.
            console.log("Expect 0: Actual " + window.criteria.get("tags").length);

            // ARGH!
            console.log("HELP!");

        });

    </script>

</head>
<body>
    <h1>Test</h1>
    <p>Backbone test page.</p>
</body>
</html>

Я просто далеко от цели? Я пытаюсь использовать Backbone для вещей, для которых он не предназначен? Или я упускаю что-то более общее в программировании на JavaScript?

Постскриптум Первоначально я использовал коллекцию тегов Backbone, но это представляло целый ряд проблем, связанных с наличием ссылки на модель тега в нескольких коллекциях и тем, как метод удаления Backbone отменяет ссылку «коллекция» при удалении элемента из любой коллекции. Еще один день, другой вопрос.

Ответы на вопрос(4)

Ваш ответ на вопрос