PS:这个翻译系列好久都没有更新了,实在是不应该,一方面是由于时间不多,另一方面也由于自身惰性太大,从今天起接着更新,会在最近的一月内把这个系列中文API文档翻译完整. 如果你想侦测并响应一个对象的变化,你需要使用observables.如果你想侦测并响应一个集合对象的变化,你需要使用observableArray.这在很多情况下,都显得非常有用,比如你想操作UI上的一组数据,控制其显示或编辑.添加或删除等. 示例 var myObservableArray = ko.observableArr…
Observables,这个词的翻译来自汤姆大叔,对于部分翻译不是很准确的,欢迎大家留言,以得到更好的翻译. Knockout是建立在以下3个核心功能之上的: 1.    属性监控与依赖跟踪 2.    声明式绑定 3.    模版机制 在本节中,我们将学习3个核心里面的第一个.但在这之前,先让我们学习一下MVVM设计模式和View Model的概念. MVVM和View Models Model-View-View Model (MVVM)是一种创建用户界面的设计模式.通过它只要将UI界面分成…
计算属性 如果你已经有了一个监控属性 firstName和lastName,如果你想显示全名该怎么做呢?这个时候你就可以通过计算属性来实现,这个方法依赖于一个或多个监控属性,如果任何依赖对象发生改变他们就会跟着改变. 例如,下面的 view model: function AppViewModel() { this.firstName = ko.observable('Bob'); this.lastName = ko.observable('Smith'); } 你可以添加一个计算属性来返回全…
目的 Visible绑定通过绑定一个值来确定DOM元素显示或隐藏 示例 <div data-bind="visible: shouldShowMessage"> You will see this message only when "shouldShowMessage" holds a true value. </div> <script type="text/javascript"> var viewMod…
从本节开始介绍关于KnockoutJs相关的内容,本节主要介绍knockoutjs一些重要特性与优点,以及它与Jquery等框架库之间的区别. 1.Knockout.js是什么? Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个富文本且具有良好的显示和编辑功能的用户界面.任何时候你的局部UI内容需要自动更新(比如:依赖于用户行为的改变或者外部的数据源发生变化),KO都可以很简单的帮你实现,并且非常易于维护. 2…
原文:Knockout应用开发指南 第二章:监控属性(Observables) 关于Knockout的3个重要概念(Observables,DependentObservables,ObservableArray),本人无法准确表达它的准确含义,所以暂定翻译为(监控属性.依赖监控属性和监控数组),如果有好的建议请指正,多谢. 1     创建带有监控属性的view model Observables Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪…
监控属性数组 如果要对一个对象检测和响应变化,会使用监控属性.如果要对一个序列检测并监控变化,需要使用observableArray(监控属性数组).这在你显示或编辑多个值,需要用户界面的部分反复出现和消失的项目并且具有添加和删除操作的情况下使用observableArray. 例如声明并赋值: var myObservableArray = ko.observableArray(); // Initially an empty array myObservableArray.push('Som…
上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章.flask没有推荐大家在这方面的功能,通常都是由自己来实现.我们通常的做法,都是按照功能划分文件,把不同功能的应用接口,划分到不同文件,如果某个功能的接口很多,再细分一下.当然你也可以按照其他划分方式划分,只要记住一点,项目怎么管理方便,就怎么划分,千万不要被框架框死. 废话说过了,来点实际的.上…
如果你想发现并响应一个对象的改变,就应该用监控属性(observables).如果你想发现并响应一个集合的变化,就该用监控属性数组 (observableArray).监控属性数组在显示或编辑多个值以及对界面的一部分重复显示或隐藏(如添加删除条目)等多种情况下 都是很有用的. 如果我们想要使用Knockoutjs表示多个值的话我们可以使用数组监控(Observable Arrays)来表示,形式如下: var myObservableArray = ko.observableArray(); m…
前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel = { personName:'aehyok', personAge:25 }; </script> 2.为ViewModel创建一个声明式绑定的简单的View The name is <span data-bind="text:personName"></…
在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还不是很熟悉,我建议先到这个网站简单学习一下,非常非常简单.http://dormousehole.readthedocs.org/en/latest/ 一直想写一些特别的东西,能让大家学习讨论的东西.但目前网上的很多博客,老么就按照官方文档照本宣读,要么直接搬代码,什么都不说明.我写这个系列的博客,…
如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而对整个项目来说,总要有后台管理系统吧,总要有web管理吧,但这些东西不能全部放到view.py.不单单是这样,如果你是一个经验丰富的程序员,你应该知道,一个程序最好只有一个入口点,从这个入口点进去,全是单向的,就像一棵树一样,入口点就在树根,然后蔓延到树干,树枝.树枝和树枝之间最好不要太多交集,也就…
任何一个好的程序,配置文件必不可少,而且非常重要.配置文件里存储了连接数据库,redis的用户密码,不允许有任何闪失.要有灵活性,用户可以自己配置:生产环境和开发环境要分开,最好能简单的修改一个东西,就能达到要求:要有安全性,最好的方式,即使有一天前端服务器被窃取信息,配置文件里的信息也不能泄露. python本身带有configparser库,可以解析普通文件的配置,但是这样不但繁琐,而且安全性也得不到保证.我在前面一再强调,能达到自己要求的实现方式,就是最好的方式.flask官方例子有一个非…
我们现在开发app,注册用户的时候,不再像web一样,发送到个人邮箱了,毕竟个人邮箱在移动端填写验证都很麻烦,一般都采用短信验证码的方式.今天我们就讲讲这方面的内容. 首先,先找一个平台吧.我们公司找的容联云通讯这个平台,至少目前为止,用的还可以.先在容联上注册一下,然后创建一个应用,如下图所示: 我只勾选了2个功能,他们这边还有很多其他功能,暂时用不到,就不选了.好了,点击"确认",一个应用就弄好了,下面就尝试着写代码发短信吧. 容联为开发者提供了免费测试功能,但一个号码基本不会超过…
上一章我们讲到如何利用alembic来更新数据库,这章,我们讲如何通过七牛服务来存储图片. 像我们大多数公司一样,公司资金比较少,如果自己开发图片服务器,代价太大:如果我们用自己的网站服务器来保存图片,很可能会把带宽阻塞住.因此,一款优秀的第三方图片服务变得非常重要.七牛就是这么一款,上传代码简单,可以在线编辑,简单的变换url,可以得到图片的不同效果.关键是,它是在一定限额内是免费的,只要通过认证,基本都够用了.我们公司现在包括app,网站所有图片都放在七牛,一直用的很好,一分钱也没有花. 好…
上面两章,主要讲基本的配置,今天我们来做一个比较有趣的东西,为每个客户加一个头像图片.如果我们图片保存在自己的服务器,对于服务器要求有点高,每次下载的时候,都会阻塞网络接口,要是1000个人同时访问这张图片,会彻底报废掉整个网络.如果你跟我一样,在小公司,没有自己专业的图片服务器,又想用图片,那就跟我一样,尝试着用七牛吧.这个真的是一款很不错云产品. 首先,在model里加一个字段, # coding:utf-8 from sqlalchemy import create_engine, For…
继续上一章所讲,上一章我们最后面说道,虽然这个是很小的程序,但还有好几个要优化的地方.先复制一下老的view.py代码. # coding:utf-8 from flask import Flask, request, jsonify from model import User, db_session import hashlib import time import redis app = Flask(__name__) redis_store = redis.Redis(host='loc…
flask开发restful api 如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而对整个项目来说,总要有后台管理系统吧,总要有web管理吧,但这些东西不能全部放到view.py.不单单是这样,如果你是一个经验丰富的程序员,你应该知道,一个程序最好只有一个入口点,从这个入口点进去,全是单向的,就像一棵树一样,入口点就在树根,然后蔓延到树干,树枝…
flask开发restful api系列(8)-再谈项目结构 摘要: 进一步介绍flask的项目结构,使整个项目结构一目了然.阅读全文 posted @ 2016-06-06 13:54 月儿弯弯0204 阅读(1497) | 评论 (0) 编辑   flask开发restful api系列(7)-蓝图与项目结构 摘要: 主要讲述flask的蓝图在restful api中的使用,以及怎么应对版本更新.阅读全文 posted @ 2016-05-24 13:35 月儿弯弯0204 阅读(8618)…
本节主要涉及到3个内容: 1. 监控属性 Observables (这个用的比较多,但是其本身使用比较简单,唯一需要注意就是,它监控的对象是一个方法,所以取值和设置值的时候容易混淆) 2. 计算属性  Computed Observable (这个在新增计算列,或者对字段属性值的读写进行验证.转换时特别有用) 3. 监控属性数组 Observable Arrays (这个用的较少,一开始不需要太深入,毕竟直接绑定数组进行简单显示的情况不多) 下面分别简单介绍一下各自的用法. 1. 监控属性Obs…
最近抽出点时间研究MVVM,包括司徒正美的avalon,google的angular,以及Knockout,博客园Tom的Knockout指南 时隔2年了,ko更新了不少,所以文档也相应的变化了,所以本人从学习的角度就翻译下官方的新的教程文章. avalon就是从KO演变过来的,不过加入ng,emberjs等框架的特色,加入许多巧妙的设计,算是很短小精悍的框架了,大家有兴趣可以对比下. Knockout是构建在3个核心的特性上的: 监控属性(Observables)和依赖跟踪(Dependenc…
phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api 结合数据库…
概述 介绍了 api 的各种写法之后,下面介绍构建 api 时与数据库连接的方式. 注 下面使用的工程的完整代码已经公开在: http://git.oschina.net/wangyubin/phoenix-api ecto 简介 ecto 其实是独立于 phoenix framework 的,它是 elixir 语言实现的用来访问数据库的框架,类似于 ORM 但是和传统的 ORM 又有些不一样. 可以这么理解,它是利用了 elixir 语言的动态性和函数式的特性,参考了传统的 ORM 的优势后…
KO是如何实现自动更新的 初学者可以掠过该篇,如果你是一个刨根问底的开发者,那本节将告诉你KO是如何实现依赖追踪和UI自动更新的. 其实很简单,KO的依赖追踪算法如下: 当你声明一个计算监控属性,KO立即调用其相关的函数来获取其初始值. 当相关函数正在运行,KO将建立一个订阅到相关监控属性(包括其他计算监控属性)并读取他们的值.订阅回调函数设置为订阅函数再次运行,循环的这个过程. 当有新的值,KO会通知你的计算监控属性将值反馈给用户. 采用PEEK控制依赖 Knockout的自动依赖跟踪通常不是…
前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel = { personName:'aehyok', personAge:25 }; </script> 2.为ViewModel创建一个声明式绑定的简单的View The name is <span data-bind="text:personName"></…
MVVM和viewModel Knockout是建立在以下三大核心功能之上的: 监控属性和依赖跟踪(Observables and dependency tracking) 声明式绑定(Declarative bindings) 模板(Templating) 首先让我们先来了解下MVVM模式,和viewModel的概念. MVVM(model.view.viewModel)是一种创建用户界面的设计模式,他旨在将一个复杂的UI简单的分割为三个部分: model : 在你的应用用作存储数据: vie…
1 创建带有监控属性的view model 1.1 Observables Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板(Templating) 1.2 MVVM and View Models Model-View-View Model (MVVM) 是一种创建用户界面的设计模式. 描述的是如何将复杂的UI用户界面分成3个部分: model…
监控属性 Knockout包含以下三个核心特性: 1.监控属性和依赖跟踪 2.显式绑定 3.模板 下面我们将学习这三点中的第一点,在这之前我们先研究下MVVM模式和视图模型的概念. MVVM和视图模型 模型:用来存储应用中的数据.它处于业务领域中,并且包含了相关的属性以及操作,与用户界面独立.在使用OK时,你将经常使用ajax保持该模型与服务端同步. 视图模型:使用纯代码表示界面的数据和操作.比如,你要实现一个列表编辑功能,那么你的视图模型就需要维持一组数据项,同时还要提供添加和删除方法. 视图…
计算监控属性(Computed Observables) 如果你有一个监控属性firstName,和另一个lastName,你要显示的全名?可以使用计算监控属性来实现-它依赖于一个或多个其他监控属性,每当这些依赖关系的监控属性改变时将会自动更新计算监控属性. 例如,下面的视图模型: function AppViewModel() { this.firstName = ko.observable('Bob'); this.lastName = ko.observable('Smith'); } 可…
.liveexample{ padding: 1em; background-color: #eeeedd; border: 1px solid #ccc; max-width: 655px; font-size:18px; 可赋值的计算监控属性 可赋值的计算监控属性是非常专业的,大多数情况下一般用不到,初学者可以跳过这一节 通常情况下,计算监控属性一般情况下是只读的.我们可以通过使用自己的回调函数让计算监控属性变为可赋值状态. 您可以用自己的定制逻辑让计算监控属性可写.就像将空属性,可以使用一…