2013-07-25 3 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 

welcomesignup 컨트롤러 단지보기 렌더링 컨트롤러에 활성 클래스를 추가하지 않습니다 stack docs 당 다음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 

와, 나는 이것을에 추가 내 CSS는 :

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

나는 의도적으로 어떻게 제어 방식이 것 대신 뷰를 렌더링 @navigate('/welcome')보고 할 가입 컨트롤러가 스택. welcome의 render 함수의 console.log 문이 호출되지만 welcome의 <div>에는 active 클래스가 추가되지 않았고 위의 CSS 때문에 표시되지 않습니다.

몇 번이나 문서를 다시 읽었으며 인터넷 검색 기능을 사용하지 못했습니다. 왜 환영 클래스에 적극적으로 참여하는 클래스가 추가되지 않습니까?

+0

이 질문을 내 컨트롤러 중 하나의 생성자에 한정하여 함수를'active' 이벤트에 바인딩하고 그 바인딩 함수가 실제로 호출되면 스택이 기본 컨트롤러를 활성화하기 전에 발생합니다. – Miles

+0

내가 뭘 하려는지 더 좋은 방법을 깨달았다 - 내 스택의 생성자를 겹쳐 썼다. 생성자 : -> super if @verify_user() then @navigate ('/ welcome') else @ navigate ('signup') – Miles

답변

1

active 이벤트의 일부로 render을 호출하는 것으로 문제가 발생한 것으로 의심됩니다.이 이벤트는 클래스가 추가 된 후에 발생합니다. render@html이므로 클래스가 추가 된 HTML을 대체합니다.

필자는 척추와 함께 소스 코드를 읽는 것이 엄청난 도움이 될 수 있음을 발견했습니다. 작은 프레임 워크입니다. 스택 관련 코드는 https://github.com/spine/spine/blob/dev/src/manager.coffee을 참조하십시오.

+0

아이디어를 주셔서 감사합니다.하지만 생각하지는 않습니다. 나는 생성자에서 뷰 렌더링 만 시도했지만 아무 것도 변경되지 않았습니다. 또한 연락처 예제는 Main 스택에서 Show 및 Edit 컨트롤러와 동일한 작업을 수행합니다. 활성 이벤트로 바인딩 렌더링 (http://spinejs.com/docs/example_contacts) – Miles