Я хотел бы использовать часть страницы для моего макета Kendo вместо того, чтобы кормить его необработанной строкой HTML. Однако я получаю сообщение об ошибке. Вот что я пытаюсь сделать:
<html>
<body>
...
<div id="main">
<div id="head">...</div>
<div id="body">...</div>
<div id="foot">...</div>
</div>
...
<script>
var layout = new kendo.Layout($('#main').html());
layout.showIn('#head', new kendo.View('<p>...</p>'));
</script>
</body>
</html>
Элемент #main
является частью HTML-страницы, поэтому я хочу вырезать его и превратить в макет Kendo для динамического преобразования страницы в одностраничное приложение. Это ошибка, которую я получаю:
Uncaught Error: Syntax error, unrecognized expression: <div id="head"></div>
<div id="body"></div>
<div id="foot"></div>
Не уверен, почему, потому что он работает, если я вырезал и вставлял HTML в макет инициализации. У меня есть jsFiddle, созданный здесь: http://jsfiddle.net/bN754/
Хорошо, я обнаружил, что новые строки и пробелы в.html() разбивали его. Поэтому мне пришлось вычистить новые линии и пробелы, прежде чем загружать их в макет:
<html>
<body>
...
<div id="main">
<div id="head">...</div>
<div id="body">...</div>
<div id="foot">...</div>
</div>
...
<script>
var html = $('#main').html().replace(/^\s+|\r\n|\n|\r|(>)\s+(<)|\s+$/gm, '$1$2');
$('#main').empty();
var layout = new kendo.Layout(html);
layout.render("#main");
</script>
</body>
</html>
Из документации Telerik я бы подумал, что это вызвано отсутствием инструкции рендеринга вашего объекта макета.
<script>
var layout = new kendo.Layout($('#main').html());
layout.render($("#main"));
layout.showIn('#head', new kendo.View('<p>...</p>'));
</script>
Дайте мне знать, если это решит вашу проблему, иначе у меня будет другая гипотеза. :-)