我有一个类,其中可以静态调用各个方法,但会返回一个新的类实例以进行链接,例如:
var builder = ns
.setState('a', 'A')
.setState('b', 'B');
Run Code Online (Sandbox Code Playgroud)
在哪里Builder定义如下:
/**
* @module Builder
*/
/**
* @class Builder
*/
/**
* @private
*/
function Builder() {
this.state = {
query: {}
};
}
Builder.prototype = {
/**
* @param {string} k - The key
* @param {object} v - The value
* @return {Builder}
*/
setState: function(k, v) {
var that = (this instanceof Builder) ? this : new Builder();
that[k] = v;
return that;
}
// …Run Code Online (Sandbox Code Playgroud) 我有一些代码在元素范围索引上运行"无效值"设置.在这种情况下,我已经在我的数据库中dateTime的onDate元素上配置了元素范围索引(这将适用于XML元素和JSON属性).我已设置该索引以拒绝无效值.此设置意味着如果我尝试设置onDate元素的值并且它不能转换为dateTime或者为null(nullJSON或xsi:nil="true"XML中的文字),则我的更新将失败.(相反的行为是完全忽略无效值.)
我在MarkLogic 8.0-4中的服务器端JavaScript中尝试了以下代码:
'use strict';
declareUpdate();
var errors = [];
var inputs = {
'/37107-valid.json': (new Date()).toISOString(),
'/37107-invalid.json': 'asdf', // Should throw an error
'/37107-null.json': null
};
for(var uri in inputs) {
try {
xdmp.documentInsert(
uri,
{ 'onDate': inputs[uri] },
xdmp.defaultPermissions(),
['37107'] // Collections
);
} catch(err) {
errors.push(err);
}
}
errors.length;
Run Code Online (Sandbox Code Playgroud)
我本来期望我的请求成功并最终结束1 === errors.length,因为只有第二个插入会失败,因为'asdf'它不能作为a转换dateTime而且它不是null.但是,我得到一个XDMP-RANGEINDEX错误,我的交易失败.为什么我的try/ catch …
我正在尝试构建一个可链接的JavaScript API.(我在最新版本的V8中运行它,启用了迭代器和生成器.)在下面的示例中,setState是可链接的.它还允许您调用它而无需显式创建新Builder实例.该chain()辅助函数处理该自动返回该实例所以setState不必担心.(胜利的一流功能!)
除了可链接的方法,我想要一些"终止"方法.踢球者是这些"终结者"是发电机.生成器生成Builder实例的内部状态.问题是我无法弄清楚f.apply(that, arguments)发电机的等价物.我希望能够this在运行时调用生成器并设置其上下文,就像您可以使用Function.prototype.apply和Function.prototype.call.
解决方法Yuck!是在委托上公开委托和原始生成器Builder.prototype,从委托调用原始生成器.有没有办法像chain方法一样实现等效包装而不必在_generate方法上公开方法Builder.prototype?
function Builder() { this.initialState = 'initialState'; };
Builder.prototype.setState = chain(function(k, v) { this[k] = v; });
Builder.prototype.generate = delegate(generate, '_generate'); // Yuck!
Builder.prototype._generate = generate;
function chain(f) {
return function() {
var that = (this instanceof Builder) ? this : new Builder();
f.apply(that, arguments); // …Run Code Online (Sandbox Code Playgroud) 我需要在MarkLogic中的XQuery中构建一个JSON节点.我知道我可以使用xdmp:unquote()从字符串解析为node().但是,我想以编程方式构建JSON,而不需要丑陋的字符串连接.我可以使用计算元素构造函数在XQuery中构建XML节点.JSON节点有类似的东西吗?
我有一个从默认加载的 Pandoc (v1.19.2.1) HTML5 模板--data-dir。在模板中,我需要加载外部资源,例如样式表和 JavaScript。我想相对于模板的路径加载这些资源,而不是工作目录或源文件。例如,在 macOS 上,在~/.pandoc/templates/hierarchical/hierarchical.html:
…
<link rel="stylesheet" href="hierarchical.css">
…
Run Code Online (Sandbox Code Playgroud)
wherehierarchical.css位于~/.pandoc/templates/hierarchical/hierarchical.css与模板本身相同的目录中。
然后从命令行调用:
pandoc \
--from=markdown_strict+header_attributes+yaml_metadata_block+pipe_tables\
--to=html5 \
--self-contained \
--template="hierarchical/template.html" \
--section-divs \
--output="$1.html" \
--toc \
--toc-depth=6 \
"$1.md"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
pandoc: Could not fetch hierarchical.css
hierarchical.css: openBinaryFile: does not exist (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了 CSS 文件的各种其他相对路径。唯一有效的是绝对路径/Users/jmakeig/.pandoc/templates/hierarchical/hierarchical.css,当然,它只适用于我的笔记本电脑。
有什么方法可以解析 Pandoc 模板中相对于模板本身的外部资源,从而使模板具有可移植性?我没有看到可以在模板或命令行选项中使用的明显外部变量。
我不清楚如何在Redux中协调多个顺序动作。例如,我有一个应用程序,该应用程序的左侧有一个“摘要”面板,右侧是一个“ CRUD”面板。用户CRUD之后,我希望该应用程序自动更新摘要。我还希望能够独立地刷新摘要和CRUD。换句话说,我不希望CRUD操作必须了解摘要或任何其他将来的下游后续操作(反之亦然)。有没有使我的动作创建者不了解其他动作的最佳实践来协调这一工作?
例如,这是(实体)动作创建器,用于清除实体集合(CRUD动作)。正确,现在它与fetchSummary()调度紧密耦合。
export function clearCollection(collection) {
return function(dispatch) {
dispatch(requestCollectionClear(collection));
return doClearCollection(collection)
.then(function(coll) {
dispatch(receiveCollectionCleared(coll))
})
.then(function() {
dispatch(fetchSummary()); // <-- How do I chain actions without tight coupling?
});
// TODO: .catch()
}
}
Run Code Online (Sandbox Code Playgroud)
在此处requestCollectionClear()启动异步操作,并且fetchSummary()是工作流中后续步骤的操作创建者。什么是分离的最佳模式fetchSummary(),从clearCollection()去耦他们使用彼此独立的?
有人可以帮助我更好地理解在ES2015中使JavaScript字符串可迭代的设计决策吗?大多数iterables代表其他的东西集合:Array,Set,Map,Generator(有点八九不离十).字符串只能是字符串的集合(即,Unicode代码点).因此,如果您希望函数接受字符串集合(例如Set字符串或生成字符串的生成器)或单个字符串,则无法区分用户的意图.她是指单个字符串还是可迭代的代码点?与传递字符串集相比,迭代字符似乎是一个角落案例.在这种情况下,我的倾向是当(预期)类型为string∪ 时的特殊情况字符串参数Iterable<string>.
function deleteDocuments(ids /* string or Iterable<string> */) {
if('string' === typeof ids) {
deleteSingleDocById(ids);
} else {
for(let id of ids) {
deleteSingleDocById(id);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我有一个简单的列表细节编辑器的简单REPL 示例。它由三个部分组成:
Annotation 是细节Annotations遍历数据并创建Annotation实例App 是创建 Annotations我已经想通了如何把一个自定义斯维尔特店管理Array实例数据的Annotations。我可以通过将 store 直接导入到Annotations组件中并在没有来自顶级App组件的任何道具的情况下调用它来使用它。但是,我希望能够将 store 作为Annotations来自App父级的组件的属性传入,即<Annotations items={store}/>不是<Annotations/>。
这可能吗?我认为从父组件注入 store 比从组件本身导入它更灵活/可测试。我是否在 Java 中对 Spring 进行了过多的依赖注入,并且我错误地考虑了 Svelte 模型?
javascript ×5
ecmascript-6 ×2
marklogic ×2
constructor ×1
generator ×1
iterable ×1
jsdoc ×1
json ×1
nosql ×1
pandoc ×1
private ×1
redux ×1
svelte ×1
v8 ×1
xquery ×1