2011-11-16 6 views
9
나는 현재과 같이 require.js를 사용하여 작업 AMD 백본 모델이

:Node.js를하고 AMD (브라우저에 require.js)와 백본 모델을 사용하는 방법

// models/game.js 
define(['backbone'], 
function(Backbone) { 

    var Game = Backbone.Model.extend({ 
    urlRoot : '/games/' 
    , defaults : { 
     name : null 
    } 
    }); 

    return Game; 
}); 

AMD/백본 조직을 this tutorialjrburke's Pull Request for Backbone에서 제공됩니다.

Node.js에서 백본 모델을 사용하고 싶습니다. 이전에 AMD를 사용하지 않을 때 백본 모델 및 컬렉션 공유가 원활하게 작동했기 때문에, 나는 분명히 masochist입니다. 나는 CommonJS notes 보았다 동안

// collections/games.js 
define(['backbone', 'models/game'], 
function(Backbone, Game) { 

    var Games = Backbone.Collection.extend({ 
    model: Game 

    , initialize: function() { 
     console.log(Game) 
     // Game is undefined 
     var game = new Game({ name: 'game1' }); 
    } 
    }); 

    return Games; 
}); 

: 나는 브라우저에 포함 할 때

// models/game.js 
(function(root, factory) { 
    if (typeof exports !== 'undefined') { 
    factory(root, exports, require('backbone')); 
    } 
    else if (typeof define === 'function' && define.amd) { 
    define(['backbone'], function(Backbone, exports) { 
     factory(root, exports, Backbone); 
    }); 
    } 
}(this, function(root, Game, Backbone) { 

    Game = Backbone.Model.extend({ 
    urlRoot : '/games/' 
    , defaults : { 
     name : null 
    } 
    }); 

    return Game; 
})); 

그러나 Game 지금 정의되지 않는다 :

그래서 나는 (백본 모드에서 영감) 다음 시도 , 나는 아직도 불분명하다. 브라우저 및 Node.js 모듈에서 동일한 백본 모델 파일을 AMD 파일로 사용하는 방법은 무엇입니까?

보너스 : 각 파일의 상단에 ~ 10 줄보다 깨끗한 방법이 있습니까?define shim이 이상적입니다.

답변

4

노드에서 AMD 방식으로 시도해 보셨습니까?

http://requirejs.org/docs/node.html - 클라이언트와 백엔드 양쪽에서 동일한 AMD 모듈을 사용하려는 경우 가장 좋은 해결책 일 수 있습니다.