2012-02-09 3 views
6

Модель моего приложения выглядит очень большой. Как правильно разделить его на файлы и пространства имен? Создать второй объект пространства имен и передать модель представления в качестве параметра?split up knockoutjs

var BALL = {}; 
BALL.roll = function(avm) { // function code }; 
+3

Этот ответ может помочь вам: http://stackoverflow.com/questions/8676988/example-of-knockoutjs-pattern-for-multi-view-applications. Он имеет три варианта использования нескольких моделей представлений в Knockout. –

ответ

11

Мои личные предпочтения не дробить свои applyBindings вызовы и вместо того, чтобы работать с единой глобальной ветви пространства имен от этого.

Мое рассуждение состоит в том, что для множественных привязок для правильной работы и неконфликтности вы должны быть очень осторожны, чтобы выбранные целевые элементы dom не менялись. К сожалению, разметка имеет неприятную привычку меняться со временем, что может вызвать у вас проблемы с вашими взглядами в будущем.

Мой общий подход, который я использовал на очень большом проекте KO был

  1. Одно глобальное пространство имен верхнего уровня для всего приложения, например myapp
  2. дробить отдельные функциональные блоки в отдельные файлы. Обычно с их собственным пространством имен. например `myapp.navigation '
  3. Если одно пространство имен, в частности, становится слишком большим, разделите его на дополнительные пространства имен или если это не подходит, разделите одно и то же пространство имен на несколько файлов.
  4. Заполните все файлы в конце, чтобы сохранить производительность.

Некоторые пространства имен код, который я недавно использовал

Так что в вашем файле myapp.navigation вы бы

Namespace("myapp.navigation", function() { 
    var self = this; // your myapp.navigation object 

    this.someFunction = function() { 
    }  
}); 

Это просто сокращение для использования функции самостоятельно вызывающую к передать в построенное вручную пространство имен. Это дает вам закрытое закрытие, и вы можете использовать несколько вызовов в пространстве имен с тем же пространством имен в другом файле js.

Вашего applyBindings вызов может теперь всегда быть

ko.applyBindings(myapp); 

Надеется, что это помогает.