way.js中文文檔

------------------(第一次翻譯,不完全正確的地方請多包涵,僅供學習參考)
英文文檔參考地址
簡單的,輕量級的,持續的,雙向數據邦定框架的JS庫
少量的JS代碼編寫,且沒有依賴性
codeopen

快速開始

HTLM標簽類似于這樣定義

 <form way-data="myFormData" way-persistent="true">
    <input type="text" name="name">
    <input type="text" name="age">
    <input type="text" name="gender">
  </form>

  Name: <span way-data="myFormData.name"></span>

現在,表單里每個元素的改變都會存儲在內存中。在頁面加載時,存數的數據保留在。

安裝

包含下列代碼在你的頁面即可
<script src="way.min.js"></script>

選項
name type default description
data string null 允許定義點分隔的路徑當數據被存儲時。包含數組,當使用一個表單時,包含所有inputs name屬性的json被創建和存儲在固定的存儲中。通過"__all__" 可以獲取所有的 way.js' 數據。
default string null 一個鏈接到一個默認數據設置在一個元素上,確保在沒有綁定值的情況下。
persistent boolean true 當綁定的值改變時,允許數據存儲到localStorage
readonly boolean false 防止元素改變重置綁定值
writeonly Boolean false 防止元素綁定值改變時改變。
json boolean false 返回json格式到dom頁面
html boolean false 聲明數據屬性是否能被HTML解析
pick array null 一個逗號分隔的值列表選擇(僅在表單中)與存儲同步。默認情況下,所有表單的input同步。
omit array null 一個逗號分隔的值列表選擇(僅在表單中)與存儲同步。
例子
<form way-data="some.form" way-pick="some,properties,that,can.be.nested">
<form way-data="some.form" way-omit="dont,want.those">
<img way-data="some.image" way-default="http://upload.wikimedia.org/wikipedia/en/a/a6/Bender_Rodriguez.png">
<pre way-data="some.json" way-json="true"></pre>
Scopes

你可以在Html數據中設置scope(范圍)

[way-scope] attribute

用該屬性指出所有包含在這個范圍內的子“way-data”

way.set("someScope", { with: { something: "hello" }})
<div way-scope="someScope">
  <div way-scope="with">
    <div way-data="something"></div> <!-- Will render "hello" -->
  </div>
</div>
[way-scope-break] attribute

打破scope鏈。這個元素的所有子元素將會沒有范圍設置。

way.set("someScope", { with: { something: "hello" }})
<div way-scope="someScope">
  <div way-scope-break="true">
    <div way-data="someScope.with.something"></div> <!-- Will render "hello" -->
  </div>
</div>
scope()方法

返回給定Dom元素的scope

<div way-scope="someScope">
  <div way-scope="with">
    <div way-data="something" id="someDIV"></div>
  </div>
</div>
way.dom("#someDIV").scope() 
>> "someScope.with"
Repeats

復制一個Dom元素的每個值,可以通過“way.js”循環傳遞數據
注釋
1.重復塊會自動為子元素設置適當的范圍。
2.在每一次循環中,“$$key”與對應當前循環到元素的key
設置

way.set("some.list", [
 {name:"Pierre"},
 {name:"Paul"},
 {name:"Jacques"}
]);
<div way-repeat="some.list">
 $$key - <span way-data="name"></span>
</div>

渲染后得到

<div way-scope="some.list">
 <div way-scope="0">
 0 - <span way-data="name">Pierre</span>
 </div>
 <div way-scope="1">
 1 - <span way-data="name">Paul</span>
 </div>
 <div way-scope="2">
 2 - <span way-data="name">Jacques</span>
 </div>
</div>
Transforms

顯示的值格式設定
[way-transform] attribute
如果有多個transforms,使用“|”分隔,如果多個transforms之間有沖突,將由最后一個提到的tansform決定

Name Description Example
uppercase Sets a string to uppercase "hello" becomes "HELLO"
lowercase Sets a string to lowercase "HELLO" becomes "hello"
reverse Reverses a string "hello" becomes "olleh"
way.set("someData", "hello")
<div way-data="someData" way-transform="uppercase"></div>
<!-- Renders "HELLO" -->

egisterTransform(name, transform) 方法
自定義一個transform

way.set("someData", "hello");
way.registerTransform("lolify", function(data) {
 return data + " lol";
});
<div way-data="someData" way-transform="lolify|uppercase"></div>
<!-- Renders "HELLO LOL" -->

Helper elements

允許完成簡單click任務
Example:

way.set("some.list", ["I", "am", "list"]);
<div id="clickToRemove" way-action-remove="some.list.2"></div>
<div id="clickToPush" way-action-push="some.list"></div>
$("#clickToRemove").click();
$("#clickToPush").click();
way.get("some.list");
>> ["I", "am", null]
Helper classes

對于圖片而言,way.js允許給dom元素添加class,檢測 load/error/success狀態

class Description
way-loading When an image is getting downloaded to a DOM element
way-error When no image is returned from the URL provided
way-success When... Well, you got it.
way.set("image.url", "somethingThatsNotAnImageURL");
<img way-data="image.url">
<!-- Gets a class ".way-error" attributed -->
Methods

HTML 標簽就已經可以完成很多功能,但如果有必要,你也可以使用輔助功能在存儲數據和Dom元素之間進行交互。
注釋
1.[element]可以作為dom元素的css選擇器
2.[options]是可選的。缺省情況下,options讀取Html標簽。但是你可以通過傳遞參數重寫他們。
DOM methods
way.dom(element).toStorage(options)
存儲這個元素的值到內存中去

way.dom("#someForm").toStorage()

從內存中設置元素的值

way.dom("#someForm").fromStorage()

way.dom(element).toJSON(options)
但會一個input解析數據的json(尤其是方便表單處理)

way.dom("#someForm").toJSON()

>> {
        its: "values",
        serialized: {
            in: "a json"
        }
    }

way.dom(element).fromJSON(data, options)
從json數據中設置元素的值

way.dom("#someForm").fromJSON({name:"John Doe"})

way.dom(element).getValue()
返回dom元素的json值

way.dom("#someForm").getValue()

way.dom(element).setValue(value, options)
從json數據中設置元素的值

way.dom("#someForm").setValue({name:"John Doe"})

way.dom(element).setDefault(force)
設置一個元素的缺省值。默認情況下,dom元素的值為缺省值。其綁定值在數據存儲不變。如果你需要強制設置這個內存中的缺省值,通過[force]參數

way.dom("#someForm").setDefault()

way.setDefaults(force)
設置所有綁定dom元素的缺省值

way.setDefaults()

way.dom(element).getOptions()
返回dom元素 ["way-"] options列表

way.dom("#someForm").getOptions()
Data methods

way.get(selector)
返回一個給定的路徑名存儲數據的值

way.get("some.path");
>> "bonjour"

way.set(selector, value, options)
在指定路徑名下存儲數據值

way.set("some.path", "bonjour!");

way.remove(selector, options)
移除給定路徑名下的存儲值

way.remove("some.path");
way.get("some.path");
>> undefined

way.clear(options)
清除所有數據

way.clear();
way.get();
>> {}
localStorage methods

way.backup()
將way.js中的存儲數據保存到localStorage

way.backup();

way.restore()
回復在localStorage中的數據。Called on $(document).ready by default (can be changed with global options).

way.restore();
Binding methods

way.registerBindings()
觸發dom搜索找到并保存這個元素的[way-data]屬性,綁定一些數據

way.registerBindings()

設置了綁定data選擇器的dom元素的值。如果omitted,所有way-data屬性的dom元素將會被刷新(excluding write-only's and omitted)

way.updateBindings("formData.name")
Repeat methods

way.registerRepeats()
觸發dom搜索找到并保存這個元素的[way-repeat]屬性,綁定一些數據

way.registerRepeats()

way.updateRepeats(selector)
觸發更新重復元素各自的值

way.updateRepeats("somethingToBeLooped")
Watcher methods

way.watch(selector, callback[value])
觀察給定值的變化

way.watch("some.data", function(value) {
 console.log("Data has been updated to value: " + value);
});

way.watchAll(callback[selector, value])
觀察所有way.js中存儲數據的變化

way.watchAll(function(selector, value) {
 console.log("The data " + selector + " has been changed.", value);
});
Global options

way.options.persistent (Boolean)
當document.ready (true by default)時,設置是否從localstorage中恢復數據

way.options.persistent = true

way.options.timeoutInput (Number)
Number of milliseconds of the timeout between keypresses on bound elements to store their values to the datastore (50 by default).

way.options.timeoutInput = 50

way.options.timeoutDOM (Number)
Number of milliseconds of the timeout between scans of the DOM to list bound elements on each DOM change (500 by default).

way.options.timeoutDOM = 500
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容