Polymer app最佳实践

时间:2016-10-29 11:24:39

标签: web polymer polymer-1.0 web-component polymerfire

在开发Polymer Web App时,我有最好的实践问题。

假设我有一个Todo应用程序。主要元素<ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionLeave={true} transitionAppearTimeout={600} transitionLeaveTimeout={300} > <div key={"slidebar"} className="chatBar"> <Tab /> </div> </ReactCSSTransitionGroup> .example-appear { width: 0; transition: width 0.5s ease-in-out; } .example-appear.example-appear-active { width: 17%; } .example-leave { width: 17%; transition: width 0.9s ease-in-out } .example-leave.example-leave-active { width: 0; } 负责在这些元素之间切换:my-main-task所有任务,list单个任务,创建view任务,new任务和edit任务。

我的问题是:delete元素必须单独使用newfirebase-document保存数据,还是将其委托给iron-ajax

1 个答案:

答案 0 :(得分:4)

在最近的聚合物峰会(伦敦2016)中,有很多关于 lazy 的讨论(如在延迟加载中)。这意味着,您只需加载/渲染所需内容,并且(在最好的情况下)没有其他内容。

这就是说,对您的问题的简短回答是: new元素应该自行保存数据,因为这是最合适的地方。

至于答案很长,请耐心等待一段时间。

Google Developer's Web Fundamentals页面上,实际上有一个名为The App Shell Model的架构模式。此模式实际上描述了您的my-main-task元素。

一些有用的引用:

  

应用程序“shell”是为用户界面提供动力所需的最小HTML,CSS和JavaScript /.../

     

/.../通常,您的应用应尽可能加载最简单的shell,但在初始下载时包含足够有意义的页面内容。

这就是说,将用于保存新项目的逻辑放入app shell元素(在您的情况下为my-main-task元素)是不明智的。

为了更进一步,让我们看一下Polymer的样本Shop appGithub repoOnline demo)。

如果查看“app shell”元素shop-appsource code),您会发现它只实现了以下内容:

  • 基本页面布局(侧边栏,内容)
  • 路由
  • 购物车数据
  • 购物车逻辑

在这种特殊情况下,购物车数据和逻辑被放入shell元素中,因为它被用于所有页面,但是否则 no 其他业务逻辑在那里实现。

关于问题的长答案,让我们看一下Checkout页面,即shop-checkout元素(source code)。您可以看到,所有与表单相关的数据(即发布到服务器)都是在此元素中完成的,并且没有任何内容委托给app shell元素。

另一个例子是shop-list元素(source code)。同样,您可以看到此元素本身检索数据,并且只与app shell元素交互以更改该部分。

总而言之,让我们说出另一个好的做法,它也包含在前面提到的Shop应用程序中,数据在应用程序中的流动方式。聚合物峰会(Youtube video)就此进行了一次有趣的讨论,其实质如下:尽可能使用单向数据绑定,尽量避免双向数据绑定,除非确实有必要。为实现此目的,向下数据流(父对子)应作为单向数据绑定完成,向上数据流(子对父)应该是作为一个事件完成。这对于元素可重用性至关重要,因为元素之间的耦合要低得多。