2013-07-25 5 views
0
Spine = require('spine') 
Welcome = require('controllers/welcome') 
Signup = require('controllers/signup') 

class Main extends Spine.Stack 
    controllers: 
    welcome: Welcome 
    signup: Signup 

    default: 'signup' 

    routes: 
    '/welcome': 'welcome' 
    '/signup': 'signup' 

module.exports = Main 

В welcome и signup контроллеры просто делают вид, так что я могу понять, как работает стек:SpineJS не добавляет активный класс контроллеров

Spine = require('spine') 

class Welcome extends Spine.Controller 
    className: 'welcome' 

    constructor: -> 
    super 
    @active @render 

    render: -> 
    console.log 'welcome render function' 
    @html require('views/welcome')() 

module.exports = Welcome 

, а затем за stack docs, я добавил это мой CSS:

.stack > *:not(.active) { 
    display: none 
} 

Я целенаправленно есть контроллер SIGNUP делать @navigate('/welcome') вместо рендеринга своей точки зрения, чтобы увидеть, как я буду контролировать т он складывается. Заявление console.log в функции рендеринга приветствуется, но приветствуется <div> не имеет класса active, добавленного к нему, и из-за вышеприведенного CSS не отображается.

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

+0

Я сузил этот вопрос до конструктора одного из моих контроллеров, связывающего функцию с активным событием, и что функция привязки фактически вызывается, что происходит до того, как стек активирует контроллер по умолчанию. – Miles

+0

Я понял, что лучше сделать то, что я пытаюсь сделать, хотя я переписал конструктор своего стека: конструктор: -> super if @verify_user(), затем @navigate ('/ welcome') else @ navigate ('signup') – Miles

ответ

1

Я подозреваю, что проблема заключается в том, что вы вызываете render как часть события active, которое происходит после добавления класса. Поскольку render вызывает @html, он заменит HTML, в котором был добавлен класс.

Как в стороне, с позвоночником, я обнаружил, что чтение исходного кода может очень помочь. Это крошечный каркас. См. https://github.com/spine/spine/blob/dev/src/manager.coffee для соответствующего кода для стеков.

+0

Спасибо за идею, но я не думаю, что это так. Я пробовал только визуализировать представление в конструкторе, и ничего не изменилось. Кроме того, пример «Контакты» делает то же самое с их контроллерами Show и Edit в главном стеке - привязка к активному событию (http://spinejs.com/docs/example_contacts) – Miles