etaoux / brix

Build site with bricks
http://etaoux.github.com/brix
MIT License
124 stars 49 forks source link

某些自定义控件需要增加 input[type=hidden] 用于存储控件的值 #19

Closed huacnlee closed 11 years ago

huacnlee commented 12 years ago

比如: starrating 和 switcher

这两个是非标准控件,这类控件在用于传统 Form 提交的场景会非常不变,因为没有一个标准的控件用于接受它的最终值,而是的使用的时候不得不用 JS 去获取这个非标准控件的值。这样给后端开发者带来一些不便。

但是............

假如我们可以再这些“非标准”控件里面植入 <input type="hidden" name="foobar" /> 这么一个隐藏的文本框,在非标准控件 change 的时候将结果放入此文本框里面,那么后端开发者就可以直接在 Form 提交以后,在服务器通过 foobar 这个参数获取到这个控件的最终值 (当然 foobar 可以由组件使用者来自由定义),而无需在 Form 提交前再单独调用 JS 获取结果。

以 switcher 为例:

<form action="/articles" method="GET">
<div bx-name="switcher">
  <input type="hidden" name="publish" value="true" />
  <label>公开</label>
  <div id="bx_switcher_post_publish" bx-name="switcher" bx-tmpl="switcher" class="switcher switcher-on">
    <span class="switcher-trigger"></span>
  </div>
  <label>不公开</label>
</div>
</form>

仅仅需要在 switcher 切换的时候改变上面那个文本框的值就可以了。

在后端代码的时候就只需要获取 publish 这个参数的值就可以拿到选择的结果的。

再到回来看,关于给“非标准控件”值修改

对于“非标准控件”赋值这个动作我们也应该支持通过修改这个文本框的内容而改变“非标准控件”的展示效果。

huacnlee commented 12 years ago

BTW. 目前 Dropdown 就是以这种方式来实现的

cyjake commented 12 years ago

僭越一下,应该加个合适的 input[type=hidden] 就可以了吧。左莫莫 @keyapril 同学是否已经完成了这块工作?记得回复并关闭这个 issue 哦……

另外,可以在 commit message 里填写 fixes #19 来自动关闭这个 issue

keyapril commented 11 years ago

其他组件看需要再添加。