Javascript 将反向url传递给knockout.js模型
我得到了带有knockout.js绑定的django模板,其中的列表应该作为一个按钮填写:Javascript 将反向url传递给knockout.js模型,javascript,python,django,url,knockout.js,Javascript,Python,Django,Url,Knockout.js,我得到了带有knockout.js绑定的django模板,其中的列表应该作为一个按钮填写: <ul data-bind="foreach: items"> <li data-bind="text: title"><li> </ul> <button data-bind="click: fillList">Show</button> FunctionFillList从服务器获取数据。它应该向url发送请求。我使用反向u
<ul data-bind="foreach: items">
<li data-bind="text: title"><li>
</ul>
<button data-bind="click: fillList">Show</button>
FunctionFillList从服务器获取数据。它应该向url发送请求。我使用反向url:
{% url "app.views.get_items" %}
将模板生成的url传递给ItemsModel的最佳方式是什么,以便它知道应该从哪里获取数据
将其作为参数传递给模型
function ItemsModel(url_get_items) {
...
}
是否可以通过单击事件将其作为参数传递
<button data-bind="click: function() { fillList('{% url "app.views.get_items" %}') }">
或者改用提交绑定
<form action="{% url "app.views.get_items" %}" data-bind="submit: fillList">
<button type="submit">Show</button>
</form>
还有别的吗?有什么最好的方法吗?我通常将url放在脚本中读取的元素的属性中,并在创建时传递给视图模型。以下是一个例子: HTML
下面是一个所以,回答我自己的问题。我发现并成功使用的最好的方法是传递给模型URL对象。通常是这样的:
<script>
var model = new ItemsModel({
csrf: '{{ csrf_token }}',
url: {
'items': '{% url "items.views.items.api.list" %}',
...
'remove_item': '{% url "items.views.items.api.remove" %}'
}
});
ko.applyBindings(model);
</script>
<script>
define('settings', {
csrf: '{{ csrf_token }}',
url: {
'items': '{% url "items.views.items.api.list" %}',
...
'remove_item': '{% url "items.views.items.api.remove" %}'
}
});
</script>
如果您计划使用r.js,则应在config中为设置提供空路径,如下所示:
({
baseUrl: 'items-app',
out: 'dist/items.js',
paths: {
'knockout': 'path/to/knockout',
'settings': 'empty:',
}
})
唯一的问题是,此方法不适用于带有参数的URL。最简单的解决方法是使用post或get方法传递所有参数。谢谢您的回答。这有点道理,但是如果你有几个url怎么办?如果有更多的url,我通常会添加一个基本url。或者可能是几个基本URL。
<script>
var model = new ItemsModel({
csrf: '{{ csrf_token }}',
url: {
'items': '{% url "items.views.items.api.list" %}',
...
'remove_item': '{% url "items.views.items.api.remove" %}'
}
});
ko.applyBindings(model);
</script>
<script>
define('settings', {
csrf: '{{ csrf_token }}',
url: {
'items': '{% url "items.views.items.api.list" %}',
...
'remove_item': '{% url "items.views.items.api.remove" %}'
}
});
</script>
require(['settings', 'knockout'], function (settings, ko) {
var model = new ItemsModel(settings);
ko.applyBindings(model);
});
({
baseUrl: 'items-app',
out: 'dist/items.js',
paths: {
'knockout': 'path/to/knockout',
'settings': 'empty:',
}
})