2013-10-14 4 views
0

В настоящее время я развиваюсь на небольшом SPA, используя sammyjs + knockoutjs.SammyJS не всегда запускает маршрут

У меня есть index.html, который содержит механизм маршрутизации и div с id 'main'.

В моем примере, который я привел к проблеме, есть страница 1 и страница 2, которая загружает страницу html с помощью частичного. Конкретная страница html имеет привязки нокаута.

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

Я пытался поставить его в JSBin:

http://jsbin.com/ufOroze/3/edit?html,js,console,output

При нажатии на ссылки они должны фактически загрузить некоторый контент из удаленного файла HTML (p1.html и p2.html) - хотя это не работает с JSBin. Так или иначе. Вы видите вызов, который не всегда запускается, и ссылку на консоли.

Я также привел пример на моем сервере. Там вы также найдете ссылку на zip-файл, содержащий весь пример: http://www.tomgrill.info/sammy_test/sammy_test.zip.

У кого-нибудь есть идея? Не понимаю ли я концепцию sammyjs oder, есть ли ошибка?

лучше, Том

ответ

0

Почему бы не собрать силы нокаута и пусть это делают в #main DIV для вас, теперь вы смешиваете нокаута и JQuery.

Я сделал легкий вес SPA для КО загрузчик, вот демонстрационный проект

https://github.com/AndersMalmgren/Knockout.Bootstrap.Demo

Он принимает обрабатывает шаблоны для вас в конвенции по конфигурации пути.

редактировать: Wiki, которая показывает, как установить его на любом интерфейсе

https://github.com/AndersMalmgren/Knockout.Bootstrap/wiki

В основном вам нужно выставить службу REST, которая возвращает шаблоны

+0

Привет. Я посмотрел на ваш код. Отличный подход. У вас также есть чистая версия HTML/Javascript/Knockout. Было бы действительно полезно (поскольку я не на Windows и не использую Visual Studio). Заранее спасибо! –

+0

См. Редактирование – Anders

+0

отлично. Спасибо! –

0

Попробуйте это: -

app = $.sammy('body', function (context) { 
    this.get('#/', function() { 
     console.log('Clicked'); 
     this.app.swap('sammy test'); 
    }); 
    this.get('#/:id', function() { 
     console.log('Clicked'); 
     var id = this.params.id; 
     ko.unapplyBindings($('#main'), false); 
     this.partial('pages/' + id + '.html'); 
    }); 


}); 
+0

К сожалению, это не работает. Я хочу изменить содержимое div (#main). –

+0

Выяснил, как это работает. Подход правильный. Нужно было только сбросить переменные, установленные на конкретных загружаемых страницах, чтобы иметь возможность восстановить привязки ko. Это не приятно, так как данные должны быть повторно инициализированы каждый раз при замене страниц. Но это работает. :) Спасибо! –