| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 05.05.2017 23:22 / 05.05.2017 23:23
как правильно подключать JS-файлыКогда страница работает, так сказать, в AJAX-режиме (то есть совершает некие действия и будет возвращать только данные, а не полный HTML страницы) на ней не нужно включать никакие скрипты и формировать прочую HTML-обвязку.
@auto[]
$basket[^load_basket[]]
$items[
$.1[Item 1]
$.2[Item 2]
$.3[Item 3]
$.4[Item 4]
]
@main[]
^response[]
@response[]
<!DOCTYPE html>
<html lang="ru">
<head>
^head[]
</head>
<body>
^body[]
^scripts[]
</body>
</html>
@head[]
^title[]
^styles[]
@title[]
<title>Page</title>
@styles[]
<style>
#items li, #full-basket td { cursor: pointer^; }
.in-basket { font-weight: bolder^; }
</style>
@body[]
^basket[]
^items[]
@scripts[]
<script src="//yastatic.net/jquery/3.1.1/jquery.min.js"></script>
<script src="/basket.js"></script>
@load_basket[]
$result[^table::load[/basket.txt]]
$result[^result.hash[id]]
@save_basket[]
$new_basket[^table::create{id title}]
^basket.foreach[;item]{
^new_basket.append[$item]
}
^new_basket.save[/basket.txt]
@basket[]
<div id="basket">
<h2><a href="/basket.html">Basket</a></h2>
^if($basket){
<ol>
^basket.foreach[;item]{
<li>$item.title</li>
}
</ol>
}{
<p>В корзине пусто.</p>
}
</div>
@items[]
<div id="items">
<h2>Items</h2>
<ol>
^items.foreach[id;item]{
$in_basket(^basket.contains[$id])
<li id="$id"^if($in_basket)[ class="in-basket"] title="^if($in_basket)[Remove from basket;Add to basket]">$item</li>
}
</ol>
</div>basket.html: @USE
/page.html
@main[]
^if(^request:headers.X_REQUESTED_WITH.pos[XMLHttpRequest] > -1){
^action[]
}{
^response[]
}
@title[]
<title>Basket</title>
@body[]
^full_basket[]
@full_basket[]
<div id="full-basket">
<a href="/page.html">&larr^;</a>
<h1>Basket</h1>
^if($basket){
<table>
<tr>
<td>title</td>
<td>quantity</td>
</tr>
^basket.foreach[id;item]{
<tr id="$id">
<td title="Remove from basket">$item.title</td>
</tr>
}
</table>
}{
<p>Basket is empty.</p>
}
</div>
@action[]
$id[$form:id]
^switch[$form:action]{
^case[add;DEFAULT]{
$basket.$id[
$.id[$id]
$.title[$items.$id]
]
}
^case[remove]{
^basket.delete[$id]
}
}
^save_basket[]
^if($form:view eq 'full'){
$result[^full_basket[]]
}{
$result[
<div id="items">^items[]</div>
<div id="basket">^basket[]</div>
]
}basket.js: $(function(){
var backend = '/basket.html';
$('body').on('click', '#items ol li', function(){
var $this = $(this);
var data = {
id: $this.attr('id'),
action: $this.hasClass('in-basket') ? 'remove': 'add'
}
$.post(backend, data, function(response){
var $response = $(response);
$('#basket').replaceWith($response.find('#basket'));
$('#items').replaceWith($response.find('#items'));
});
});
$('body').on('click', '#full-basket td', function(){
var $this = $(this);
var data = {
id: $this.parent().attr('id'),
action: 'remove',
view: 'full'
}
$.post(backend, data, function(response){
$('#full-basket').replaceWith(response);
});
});
});basket.txt: id title