django模型的knockout.js的超级简单模型视图

django-knockout-modeler的Python项目详细描述


![詹戈淘汰赛!](http://i.imgur.com/nf7vxq6.gif)


django knockout modeler[![构建状态](https://travis ci.org/miserlou/django knockout modeler.svg)(https://travis-ci.org/miserlou/django-knockout-modeler)[![pypi](https://img.shields.io/pypi/dm/django-knockout-modeler.svg?style=flat)](https://pypi.python.org/pypi/django knockout-out modeler/)
===

**django knockout-out modeler**使django模型使用knockout.js变得超级简单。对于具有许多不同模型的对象或具有许多不同字段的模型的项目,或者同时具有这两个字段的项目,它非常有用。它既可以用于复杂应用程序的原型设计,也可以直接用于简单应用程序的模板中。

**django knockout modeler**将其转换为:

``python
class myobject(models.model):
mynumber=models.integerfield()
myname=models.charfield()

myobjects=myobject.objects.all()
```

myobjectViewModel(){
var self=this;
self.myobjects=ko.observatarray(myobjectdata);

self.myobjects.push(myobject);

self.removemoyobject=function(myobject){
self.myobjects.remove(myobject)
};
self.sortmyobjectsasc=function(){
self.myobjects(self.myobjects().sort(function(a,b){
返回a.mynumber>;b.mynumber?-1:A.MyNumber<;B.MyNumber?1:0;
};
};
self.sortmyobjectsdesc=function(){
self.myobjects(self.myobjects().sort(function(a,b){
返回a.mynumber<;b.mynumber?-1:A.MyNumber>;B.MyNumber?1:0;
});
};
}


ko.applybindings(new myobjectviewmodel(),$('\myobjects')[0]);
`````



``django
{{{myobjects knockout}
```


快速启动
----


>0。安装django knockout modeler

`` python
pip安装django knockout modeler
```

1。将"knockout modeler"添加到已安装的应用程序设置中,如下所示:

`` python
已安装的应用程序=(

'knockout modeler',

````

2。在HTML中包含knockout.js:

`` HTML
<;script type='text/javascript'src='https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js'>;
```

4。敲除您的查询集:

``html
{%load knockout%}
<;script>;
{{myobjects{knockout}
<;script>;
```


>5。将您的结果模板化:

``html
<;script type="text/html"id="mytemplate">;
<;div>;
<;h2>;<;span data bind="text:myname">;<;span>;<;/h2>;
<;h3>;<;span data bind="text:mynumber">;<;span>;<;h3>;
<;/div>;
<;/script>;
````

>6。像这样循环绑定数据:

``html
<;div id="myobjects">;
<;div data bind="template:{name:'mytemplate',foreach:myobjects}">;
<;/div>;
```

**可以直接在模板中使用以生成淘汰模型和淘汰就绪数据,也可以选择其中之一。要将queryset直接作为knockout对象放入django模板中,可以执行以下操作:

``django
{{myobjects_knockout}
`````


>要单独获取数据对象,可以执行以下操作:

``django
{{myobjects_knockout_data}
````


得到公正模型,如果您更喜欢从api中加载数据,比如这样:


``django
{{{myobjects{knockout{myobjects{knockout{myobject{knockout{myobjects{{myobjects{{myobjects{knockout}
``django
{{{{myobjects{{myobjects{knockout}}
````

>progammamatic用法







<首先,导入它!

``python
_数据(你的查询集)
`````


或者..


```python
ko s=ko_json(你的查询集)
``````



>而且,令人惊讶的是,你可以对模型字符串做同样的操作:


````python
```python
``ko s=ko-ko模型(你的模型)
```````



也允许自定义字段集:

```python
fields=['custom','fieldset','allowed']
ko-s=ko(entries,fields)
`````


access control
--



如果不想将整个模型公开为knockout,可以在模型中定义一个函数:

``python
def knockout fields(self):
return['name','number']
```

默认情况下,它使用对象的u to_u dict()方法中的键。对于计算属性,可以使用python的"属性"函数。

sorting
----


django knockout提供了一些方便的数据排序方法。默认情况下,它将使用对象的"id"字段,但您也可以像这样定义自己的比较器:

``python
@classmethod
def comparator(self):
return'value'
````

pport
----


``javascript
`ko.applybindings(new myobjectviewmodel(),$(''myobjects')[0]);
`````

e在HTML模板中,需要有一个具有该ID的对象,如下所示:

``html
<;div id="myobjects">;
<;div data bind="foreach:myobjects">;
用户<;span data bind="text:myname">;<;/span>;是数字<;span data bind="text:mynumber">;<;/SPAN>;
<;div>;
<;div>;
````

这对于原型设计很方便,但是更高级的应用程序可能希望使用[master viewmodel]技术(http://stackoverflow.com/a/9294752/1135467)。

如果您使用的是多数据支持同一类型的多个查询集,需要为数据变量定义自定义名称。

``django
{{myobjects{knockout}data:'mynamedobjectsdata'}
````

您还必须使用"safe"模板标记:

``django
{{myobjects_knockout_u data:'mynamedobjectsdata,safe''safe}
```

如果你发现问题,请归档!



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使安卓材质看起来漂亮?   在运行的java jar中打开文件   java如何在RxJava中为列表使用take()运算符?   flyway 1.4.2版在Java 1.7上运行?   java为什么在到达loadfactor时需要调整哈希集合的大小,为什么不能等到集合已满   数组Java对象未返回预期数据   java在Eclipse上的Gradle项目中找不到资源:/METAINF/BenchmarkList   java如何为Spring引导应用程序提供React构建文件   java如何在jpa中创建表作为InnoDB?   Android上的java DRM安全级别   java如何在单击按钮时创建自定义Dilaog   java从多对多关系hibernate创建的表中列出数据   java ElasticSeach |在删除索引后找不到插入的文档   java是否已弃用图表上的javaFX向下展开方法?   java由于某种原因,单词sinchservice和活动的名称有一个错误,即不能解析错误“CallActivity”?