проблемы с производительностью / шаблонизацией при использовании requirejs с JQuery, jQuery Mobile, Knockout и Sammy для создания структурированного приложения с внешними шаблонами

У меня есть настройки для тестового приложения, которое включает require.js, jQuery, jQueryMobile (jqm), нокаут и Сэмми

require.js загружает в JQM, нокаут и Сэмми

На главной странице приложения я использую Сэмми для загрузки в нокаут ViewModels. Эти view моделирует загрузку в шаблонах.

так чтобы показать код ...

требуется страница:

require.config({
    jquery:     'vendor/jqm/jquery_1.7_min',
    jqm:     'vendor/jqm/jquery.mobile-1.1.0', 
    knockout: 'vendor/knockout/knockout-2.2.0',
    sammy : 'vendor/sammy/sammy',
    text:       'vendor/require/text',
views:    '../views',
templates:  '../templates'
}

});

define(['app','jqm-config'], function(app) {
   $(document).ready(function() {
  console.log("DOM IS READY");
});    

});

app.js

define(['jquery','knockout', 'sammy','views/home/home', 'views/products/products', 'jqm'],
function($, ko, sammy, appViewModel, productsViewModel) {

var self = this;
self.goHome = function() {
    ko.applyBindings(new appViewModel());
};

self.goProducts = function() {
    ko.applyBindings(new productsViewModel());
};

 Sammy(function() {
    this.get('#home', function() {
       self.goHome(); 
    });

    this.get('#products', function() {
        self.goProducts();
    });

    this.get('', function() {
       self.goHome(); 
    });

 }).run(); 

});

страница продуктов

define(['jquery', 'knockout','text!templates/test2.html', 'jqm'], 
function($, ko, productsViewTemplate){


function ProductType(id, name) {
var self = this;
self.id = id;
self.name = name;
}

return function productsViewModel() {

  $('body').append(productsViewTemplate); 
  var self = this;
  self.products = ko.observableArray(); 

    var jqxhr = $.getJSON("data/product.json")
    .success(function(data, status, xhr) { 
            self.products.removeAll();    
        $.each(data.data.productTypeList, function(i,item){
           self.products.push(new ProductType(i, item.longName));

        })        
      })
     .error(function() { alert("error"); })
     .complete(function() {

         $.mobile.changePage( '#products', { transition: "pop"});

     });

}
});

html продуктов (text2.html)




    Products
    <a href="#home" data-icon="home" data-iconpos="notext" data-direction="reverse">Home</a>


   
        

          
            <a data-bind="attr:{href:'#products/list/' + id}, text: name"></a>
          


        


Есть пара проблем

sammy должен быть загружен в таком порядке, потому что время от времени, когда я обновляю его, он выдает ошибку, что sammy или jquery не определены из-за слишком медленной загрузки, которую я предполагаю

на странице продуктов, если кто-то переходит с домашней страницы, он загружается нормально, потому что jQueryMobile changePage был вызван, но если пользователь затем обновляет эту страницу, список, пришедший из JSON, теряет все свои стили.

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

так что я думал (вероятно, не лучшее решение), но есть ли способ заставить PageChange обновить? или кто-нибудь получил лучшее решение?

3.

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

Я изо всех сил пытаюсь найти лучший способ загрузки во внешние шаблоны с нокаутом и requirejs. Я хочу сохранить шаблоны в HTML, чтобы другие члены команды могли их легко редактировать и создавать структуру.

это демо можно увидеть здесь

http://demo.stg.brightonconsulting.net.au/templates/tests/knockoutJQMProducts/

Действительно ценю любую помощь

Ответы на вопрос(1)

Ваш ответ на вопрос