小编rda*_*sky的帖子

Backbone.js - 嵌套视图是否应该保持对彼此的引用?

如果Backbone View在其render()方法中创建新视图,那么这些视图是否应该作为数据成员维护?典型的渲染方法如下所示:

render: function() {
  var myView = new MyView({ model: values });
  $('div#value', this.el).append(myView.render().el);
}
Run Code Online (Sandbox Code Playgroud)

这种渲染方法的链接意味着嵌套的视图实际上只是创建,因此它也可以链接任何渲染方法并返回一个构造良好的元素.我假设视图留给垃圾收集?

如果要修改嵌套视图......可能很重要,是应该(重新)创建,还是应该通过数据成员引用进行修改?

我遇到的问题是嵌套的视图接收事件,要求他们修改自己的嵌套视图,有时他们的父视图.

我真的不想在各地开始投掷听众.传递对父视图的引用并从子视图调用render()会导致内存泄漏,因为父视图会创建一个新的子视图,而原始子视图会维护对其父视图的引用!

目前它不像框架那样.有没有人有任何资源可以帮助我以类似框架的方式解决这个问题?

backbone.js

21
推荐指数
1
解决办法
3985
查看次数

如何跨时区正确转换时间?

假设美国加州的用户选择了日期,时间和时区:

全球啤酒马拉松将于2013年815日上午10:00开始,UTC-08:00

中欧的另一个用户打开显示此日期和时间的页面.他不想做时间计算(已经喝了很少的啤酒).他只是想看看这个日期和时间:

2013年8月15日19:00

鉴于浏览器收到加州用户输入的日期和时间信息:

有没有办法在javascript没有外部Web服务来进行正确的转换?也就是说,要检测到UTC时间上午10点UTC-08:00实际上应该是UTC-07:00上午10点,因为它是夏令时.

也许我从一开始就对此有了错误的理解,但我不想让进入的用户考虑是否应该选择UTC-08:00(太平洋标准时间)或UTC-07:00(PDT).我假设由于CA中的标准时区是PST,人们不会在夏天转向思考PDT.或者他们?!

在中欧,标准日期为UTC + 01:00,夏令时为UTC + 02:00.因此,CA和欧洲之间的差异应该是9小时,除了一年中的两个时段,当一个或另一个区域在标准和夏令时模式之间切换时.

更新:

经过一番思考和阅读评论后,我理想需要的是:

var utcOffset = f('2013-08-15T10:00', 'America/Los_Angeles');
// utcOffset == "-07:00"
var utcOffset = f('2013-11-15T10:00', 'America/Los_Angeles');
// utcOffset == "-08:00"
Run Code Online (Sandbox Code Playgroud)

到目前为止,看起来像Guido Preite建议的moment.js/timezone插件能够做到这一点(或多或少).

还有其他任何方式,使用浏览器API?

javascript timezone datetime date timezone-offset

14
推荐指数
1
解决办法
6万
查看次数

父母删除的子组件仍然会获得商店更改事件

tl; dr:mridgway在这里描述的相同问题:isMounted不足以知道你是否可以setState

我有一个像这样的组件层次结构:

PhasesList
- Phase
  - PhaseHeader
- Phase
  - PhaseHeader
Run Code Online (Sandbox Code Playgroud)

还有一个PhaseStore,它维护一个阶段列表及其详细信息.

在所有三个组件中,我监听PhaseStore更改并根据更改更新状态(重新呈现).例如,如果用户在PhaseHeader中更改阶段名称,则会触发操作,存储更新并发出更改事件.该更改事件将传播到PhaseList,Phase和PhaseHeader,并使用实际名称值进行呈现.

有一个问题,我可以删除一个阶段.此操作在PhaseStore中处理,其中相位从列表中删除并发出更改事件(如在其他情况下).此事件由所有组件处理,从上到下(因为所有组件都监听商店更改).

因此,在PhasesList中,渲染新的阶段集,而不删除一个阶段.但是,移除的阶段组件仍然会收到更改事件,而PhaseHeader也会收到更改事件.

在这两个组件中,在相变处理程序中我使用setState.我得到的信息是这样的:

警告:setState(...):只能更新已安装或安装的组件.这通常意味着您在已卸载的组件上调用了setState().这是一个无操作.

我发现人们使用isMounted来检查组件是否仍在DOM中.此方法现已弃用.

我怎样才能以适当的流量方式解决这个问题?设计我的组件及其相互通信有什么问题?

flux reactjs reactjs-flux

2
推荐指数
1
解决办法
784
查看次数