在开发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
元素必须单独使用new
或firebase-document
保存数据,还是将其委托给iron-ajax
?
答案 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 app(Github repo,Online demo)。
如果查看“app shell”元素shop-app
(source code),您会发现它只实现了以下内容:
在这种特殊情况下,购物车数据和逻辑被放入shell元素中,因为它被用于所有页面,但是否则 no 其他业务逻辑在那里实现。
关于问题的长答案,让我们看一下Checkout页面,即shop-checkout
元素(source code)。您可以看到,所有与表单相关的数据(即发布到服务器)都是在此元素中完成的,并且没有任何内容委托给app shell元素。
另一个例子是shop-list
元素(source code)。同样,您可以看到此元素本身检索数据,并且只与app shell元素交互以更改该部分。
总而言之,让我们说出另一个好的做法,它也包含在前面提到的Shop应用程序中,数据在应用程序中的流动方式。聚合物峰会(Youtube video)就此进行了一次有趣的讨论,其实质如下:尽可能使用单向数据绑定,尽量避免双向数据绑定,除非确实有必要。为实现此目的,向下数据流(父对子)应作为单向数据绑定完成,向上数据流(子对父)应该是作为一个事件完成。这对于元素可重用性至关重要,因为元素之间的耦合要低得多。