- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个 Polymer 应用程序,它从 RESTful API 中提取数据并使用它来构建界面。我在概念上坚持的一个特定领域是在 http://www.polymer-project.org/docs/polymer/polymer.html#global 中描述的 Monostate 模式的实现。 .实际上,我可以将声明性属性添加到新组件 app-globals 中,然后相当直接地访问它。
这里是关键问题:如果我通过 core-ajax 将数据来回拉取(并可能重新提交)到 app-globals 组件中的 API,我如何确保 app-globals 的所有消费者组件有相同的数据?如果我使用建议的模式,我似乎失去了我的一元论:
<polymer-element name="my-component">
<template>
<app-globals id="globals"></app-globals>
<div id="firstname"></div>
<div id="lastname"></div>
</template>
<script>
Polymer('my-component', {
ready: function() { this.globals = this.$.globals; }
});
</script>
</polymer-element>
因为每个使用 app-globals 的组件都将拉取它们自己版本的 API 数据。我错过了什么吗?有没有另一种方法可以确保应用始终只有一个版本的事实?
最佳答案
每次您在自定义组件中引用 app-globals 时,都会创建一个新的 app-globals 实例。但是这些实例中的每一个都可以共享许多属性(想想 Java 中的“静态”变量或 ObjC/Swift 中的“类”变量)。
app-globals 元素(或实际上任何 Polymer 元素)中的脚本只运行一次 - 将其视为在加载组件定义时运行。但是该脚本中的 Polymer 函数声明了一个配置对象,该对象具有属性和生命周期事件处理程序,将为每个实例单独创建。您引用的文档中的 app-globals 脚本(复制在更新下方:此版本已按稍后描述进行了修改)使用匿名闭包(一个立即运行的函数),其中包含共享变量和声明配置对象的 Polymer 函数依次引用共享变量。因此,该配置对象的每个实例 - 以及 app-globals 的每个实例 - 将引用同一组共享变量。
<polymer-element name="app-globals">
<script>
(function() {
var data = {
firstName: 'John',
lastName: 'Smith'
}
Polymer('app-globals', {
ready: function() {
this.data = data;
}
});
})();
</script>
</polymer-element>
如果一个自定义组件实例更改了其 app-globals 实例上的值(或者它们在内部更改,在您的情况下是 AJAX 调用的结果)所有其他组件实例引用app-globals 将看到更改后的值。
更新:原件,复制自:
http://www.polymer-project.org/docs/polymer/polymer.html#global
有一个缺陷,如@zreptil 所述,如果您更改数据值,则新值不适用于所有其他实例 - 因为实例变量只是引用字符串的副本。通过使用具有数据属性的对象,如上面的编辑版本,并且只读取和分配该对象的数据属性而不是覆盖对象本身,更改的值可以在实例之间共享。
关于javascript - polymer 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867741/
我有一个Polymer元素,并且在它的Javascript中,我试图找到它的宽度和高度,就像它在DOM中一样。我尝试了很多方法,但总是得到0。 最佳答案 ...这是对我有用的一个: 将Polymer.
如何在“polymer 3”元素中使用“polymer 2”元素?由于元素在shadow dom内部不起作用,因此以下内容不起作用。 static get template() { retur
在我的 React 项目中,我使用 ES6 模块已有一段时间了。在我的 React 组件中,我将使用 import: import {f1,f2} from "./myLib"; 在我的 polyme
我想知道是否有用于聚合物元素的CDN,因为您必须始终下载元素,并且通过CDN导入它会更方便。在Google上找不到任何内容?还有什么理由不存在它,或者仅仅是因为它太新了? 最佳答案 我现在不知道任何托
我试图在以下取自 Polymer Path 的上下文中理解主机和目标(和元素)和 Polymer Data Flow文档。 考虑下图: 现在考虑以下语句(来自同一个 documentation ):
polymer 文档具有以下两种方式绑定(bind)示例: Polymer({ is: 'custom-element', properties:
如果我想从具有聚合物的数组中创建纸张选择器,则看起来很麻烦: ... [[item
我最近安装了 nodejs,凉亭。然后,我使用以下命令安装了 polymer : npm install -g polymer 然后,我添加了 polymer 安装路径: C:\Users\\AppD
我正在尝试通过 querySelector 或等效方法获取在另一个元素中定义的自定义 Polymer 元素。我的代码如下: Polymer({ ready: function(){
我正在使用 Polymer v3 开发一个 Web 组件,并且需要在我的新组件的模板 HTML 中包含一些在旧式 Polymer 2 组件中定义的自定义元素。 由于 Polymer 3 不再支持 HT
我有两个 polymer 元件: 它们都是父元素内的子元素 ,并且每个都位于不同的文件中。 在 ,我有一个 ,里面有一些在那里通过点击事件来获取它的值。 目标是:在 另一方面,我想从具有如下 ur
任何人都可以向我指出使用 Polymer CLI 中的 Polymer 2 和 polymer-build 的教程吗?当我使用 polymer-starter-kit 中的任何示例并使用 polyme
我需要知道何时可以开始以编程方式使用我的自定义 Polymer 元素。元素还在undefined即使在我的 window.onload处理程序。是否有使用 Polymer 1.0 正确执行此操作的既定
我正在使用 Polymer Starter Kit 作为应用程序的基础。所以,这是一个路由到特定部分的单页应用程序。我的索引基本没变,你看这里https://github.com/PolymerEle
polymer 菜鸟... 我正在尝试根据 Polymer API 文档创建一个自定义元素,我的主页如下所示: Polymer
我在迁移到 Polymer 1.0 时遇到了一些问题 我的主要问题是“style-scope”和“my-element”类被应用于元素中的每个子节点。使用这样的东西时这不是问题:
图片中显示 People also search for 的部分,有一个可滚动的水平项目列表。我必须使用 polymer 做同样的事情,但找不到任何类似的东西。我已经实现了垂直列表,但不确定水平列表。
我想创建一个用户只能实例化一次的元素。 到目前为止,我能想到的最好的做法是在匿名函数中定义元素,并在发现该元素已存在时抛出错误。有没有办法让它拒绝被创建? (function(){ var sin
我有一个简单的元素,它只允许您一次选择一个本地文件,然后将所选文件显示为您可以删除的项目,如下所示: 该组件本身工作得很好,问题是我在同一页面中有另一个相同类型的组件,但在不同的父元素(和隐藏)内。如
我正在深入研究 Polymer 1.0 元素,我对计算的属性有点好奇。 例如,在 纸抽屉面板.html , … … … Polymer({ is: 'paper-
我是一名优秀的程序员,十分优秀!