2013-02-09 74 views
1

我開始學習Node.js和Backbone。我想分享服務器和客戶端之間的一些代碼(涉及[1][2])。更深:在服務器和客戶端之間共享JavaScript模型代碼,此方法是否有效?

  • 分享默認值爲爲模型。默認值可用於填充表單(客戶端),而它們在爲了DRY和執行客戶機/服務器驗證
  • 分享實例方法

被強制執行的服務器端

  • 分享驗證規則所以我的想法是使用一個factory對象來封裝通用代碼(默認值,驗證規則,公共實例方法)並根據環境(Node.js或AMD模塊)調整對象。

    此代碼是快速&髒,可能無法正常工作。這是一個好方法還是浪費時間?

    (function (factory) { 
        if (typeof exports === 'object') { // Node.js 
         var config = require('../config/config.json'), 
          Sequelize = require('sequelize'), 
            _ = require('underscore'); 
    
         var User = { 
          receiveSms: { 
           type: Sequelize.BOOLEAN, allowNull: false 
          }, 
          receiveNewsletter: { 
           type: Sequelize.BOOLEAN, allowNull: false 
          } 
         }; 
    
         // Add defaultValue for each returned by 
         _.each(factory.defaults, function (value, key) { 
          if(_.has(User, key)) { 
           User[key].defaultValue = value; 
          } 
         }); 
    
         module.exports = function() { 
          (new Sequelize(config.database, config.username, config.password)) 
           .define('User', User); 
         }; 
        } else if (typeof define === 'function' && define.amd) { // AMD 
         define(['backbone', 'uderscore'], function (Backbone, _) { 
          return Backbone.Model.extend(factory); 
         }); 
        } 
    }(function() { 
        return { // To be adapted 
         defaults: { 
          receiveSms: false, 
          receiveNewsletter: true 
         } 
        } 
    })); 
    
  • 回答

    1

    我認爲這是一個更好的解決方案,使用require.js(特別是在多個文件中使用下劃線等框架)。您應該僅將工廠用於運行時更改的對象。例如,一個購物車(但即使在這個例子中,我認爲使用骨幹集合更適合作爲實例化時作爲參數給你的函數)。 這裏查看更多信息:http://requirejs.org/docs/node.html

    +0

    正如我理解正確的話,與requirejs節點擴展我就可以使用一個格式爲我的模塊。這不是我要問的,但也很有趣。不管怎麼說,多謝拉。 – gremo 2013-02-09 15:04:34

    +0

    是的。例如,你可以用一些配置值來「要求」你的框架或對象。我想在閱讀一段時間後,你會意識到這正是你正在尋找的東西。 – tmuecksch 2013-02-09 15:06:25

    1

    個人,因爲它需要你來重寫你的模塊,以適應自己的規範,這將最終成爲倒閉的ECMAScript標準的演進我會帶領來自requirejs了。

    目前,我會建議尋找'吞噬'流式構建系統。使用它,你會發現把你的共享js腳本放到一個可公開訪問的目錄中非常容易,然後它可以從客戶端加載。將節點js模塊轉換爲瀏覽器腳本的常用技術是使用'browserify' - magic!

    處理:gulp.src> gulp-browserify> gulp.dest> ??? >利潤。

    延伸閱讀:http://viget.com/extend/gulp-browserify-starter-faq

    相關問題