组件

pandyle使用p-com属性提供组件功能。pandyle中的组件实质就是一段html代码,在标签中使用p-com属性来指定组件的名称。VM会根据p-com中指定的名称和Pandyle配置中的comPath字段去加载对应的组件并渲染。如果没有设置comPath,VM会在默认的./components文件夹中寻找对应名称的组件。

示例代码:/index.html中:

  1. <div class="main">
  2. <div p-com="demo.book" p-context="|{title: '三国演义', author: '罗贯中', price: 150}"></div>
  3. </div>
  4. <script>
  5. //使用Pandyle.config来设置comPath
  6. Pandyle.config({
  7. comPath:{
  8. demo: '/demo/components/{name}.html'
  9. }
  10. });
  11. $('.main').vm();
  12. </script>

示例代码:/demo/components/book.html文件夹中:

  1. <div>
  2. <p>书名:{{title}}</p>
  3. <p>作者:{{author}}</p>
  4. <p>价格:{{price}}</p>
  5. </div>

在组件中,可以使用<style>标签来定义样式,使用<script>标签添加js代码。注意,在<script>中需使用window.xxx = …来定义全局的函数或变量。

示例代码:/demo/components/book.html文件中:

  1. <div class="book">
  2. <p class="title">书名:{{title}}</p>
  3. <p class="author">作者:{{author}}</p>
  4. <p class="price">价格:{{price}}</p>
  5. <button p-bind="onclick: buy({{price}})">购买</button>
  6. </div>
  7. <style>
  8. .book{
  9. border: 1px solid brown;
  10. }
  11. .title{
  12. color: red;
  13. }
  14. .author{
  15. color: blue;
  16. }
  17. .price{
  18. color: brown;
  19. }
  20. </style>
  21. <script>
  22. window.buy = function(price){
  23. if(price > 100){
  24. alert('太贵,不买了');
  25. }else{
  26. alert('不贵,买了');
  27. }
  28. }
  29. </script>

在组件的<script>中,可以使用this.onLoad来设置每次组件加载之后要执行的函数(不通过this.onLoad,而直接写在<script>中的代码,将只在第一次引用组件的时候执行,通常用来定义一些全局的函数或变量)。

示例代码:

  1. ...
  2. <script>
  3. this.onLoad = function(context){
  4. console.log(context); //context是当前组件的上下文
  5. }
  6. </script>

关于p-bind和p-com的顺序:在渲染模板时,p-bind的解析在p-com之前,因此,你可以使用p-bind来动态加载组件。

示例代码:

  1. <div p-bind="p-com: {{type}}" p-context="info"></div>
  2. ...
  3. <script>
  4. var goods = {
  5. type: 'book',
  6. info: {
  7. title: '三国演义',
  8. author: '罗贯中',
  9. price: 150
  10. }
  11. };
  12. $('div').vm(goods);
  13. </script>