2012-05-14 2 views
0

Я смущен относительно того, как исправить это и хотел ваше мнение. Я создал библиотеку, смоделированную после того, как подчёркивает способ работы с узлами и браузерами. Ниже приведена сводная версия кода: https://gist.github.com/76121b90fb1ae392a4deBackbone Mixins ссылка на экземпляр

Обратите внимание, что я использую Mixin для переопределения метода синхронизации для определенных классов. В этом случае класс Session. Это связано с тем, что некоторые из наших конечных точек не успокаиваются, но JSON RPC, поэтому я должен обрабатывать их по-разному (см. Строку 51).

Конфигурация передается в экземпляр MyLibrary (строка 86). Эти переменные конфигурации затем доступны, например, как window.mylibrary.area.jsproxi. Это прекрасно ... Проблема в том, что я не могу найти элегантный способ доступа к тем же атрибутам экземпляра из метода mixin.sync (строки 11 и 12 являются примерами этого).

Любые идеи? Я не знаю, как получить экземпляр MyLibrary из библиотеки после создания экземпляра. И я не могу использовать имя, которое я прикрепляю к окну, потому что я не знаю, как это будет имя.

спасибо!

Луис

ответ

0

Во-первых, в плане того, как можно было бы подойти с использованием Примеси в Backbone, обратите внимание на следующее решение: Proper way of doing view mixins in Backbone. это позволит убедиться, что ваша ссылка на это верна в любой момент времени.

второго Вы инстанцирование нового MyLibrary, которая является моделью

new MyLibrary({ 
    "area": { 
    "ajax_synchronization_token": "sometoken", 
    "jsproxy": "proxytoken" 
    }, 
    "user": { 
    "key": "somekey", 
    "signature": "somesignature" 
    } 
}); 

и рассчитывает получить доступ к значениям как таковые:

this.area.ajax_synchronization_token, 
this.area.jsproxy 

в то время как вы должны быть действительно пытаетесь получить доступ к тем значения

var area = this.get('area'); // it's a model after all 
area.ajax_synchronization_token 
area.jsproxy 
+0

Я пробовал это, но я думаю, что пытаюсь получить доступ к window.mylibrary.area или другому атрибуту s BEFORE MyLibrary.initialize() выполняется, и, следовательно, они недоступны. – luisgo

+0

Исправление: я могу получить доступ, например, к window.mylibrary.get ("area"), который возвращает атрибут, но я не могу получить доступ к window.mylibrary.area, который является экземпляром Area, который содержит другие материалы, потому что (я считаю) MyLibrary.initialize не выполняется. – luisgo

+0

Я думаю, что я делаю вещи более запутанными, не уточнив, что есть еще один класс под названием Area(), который я создаю в MyLibray.initialize и зависает от mylibrary.area. – luisgo

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