小编Pas*_*cht的帖子

部分通过把手传递变量

我目前在express.js应用程序中处理handlebars.js.为了保持模块化,我将所有模板分成了部分.

我的问题:我找不到通过部分调用传递变量的方法.假设我有一个部分看起来像这样:

<div id=myPartial>
    <h1>Headline<h1>
    <p>Lorem ipsum</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我们假设我使用名称"myPartial"注册了这个部分.在另一个模板中,我可以说:

<section>
    {{> myPartial}}
</section>
Run Code Online (Sandbox Code Playgroud)

这工作正常,部分将按预期呈现,我是一个快乐的开发人员.但我现在需要的是一种通过此调用传递不同变量的方法,例如,如果给出标题,则在部分内部进行检查.就像是:

<div id=myPartial>
    {{#if headline}}
    <h1>{{headline}}</h1>
    {{/if}}
    <p>Lorem Ipsum</p>
</div>
Run Code Online (Sandbox Code Playgroud)

并且invokation应该看起来像这样:

<section>
    {{> myPartial|'headline':'Headline'}}
</section>
Run Code Online (Sandbox Code Playgroud)

或者.

我知道,在渲染模板之前,我能够定义所需的所有数据.但我需要一种方法来解决这个问题.有可能吗?

html javascript templating handlebars.js

123
推荐指数
6
解决办法
12万
查看次数

为什么在冲突后输出git状态时git"都被修改"?

当尝试在git中合并时在文件上发生冲突时,git会both modified在有这样冲突的文件上说:

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

      both modified: file1

no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

不确定为什么确切" 两个修改".你们有谁知道吗?

git

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

在把手中的助手内渲染模板

大家好!

因为似乎没有答案:通过把手部分传递变量,我正在努力解决这个问题.因此,我们的想法是注册一个辅助函数,该函数使特定模板具有可能的值.一些代码使得理解更好.

这是我如何调用我的助手:

<div>
    {{myHelper}}
</div>
Run Code Online (Sandbox Code Playgroud)

这个帮助器注册了这个小代码:

hbs.registerHelper(name, function (args) {
    args = args || {};
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));
    return template(args);
});
Run Code Online (Sandbox Code Playgroud)

我把这个snippiet放到一个循环中,一次注册不同的帮助器.这意味着给出了'name'和'file'.

好的,现在我可以做这样的事情:

// 'values' could be something like this:

var values = { headline: 'HEADLINE' }

<div>
    {{myHelper values}}
</div>
Run Code Online (Sandbox Code Playgroud)

在帮助器中,我现在可以测试是否给出了某些值:

// myHelper template

<div>
    {{#if headline}}
    <h1>{{headline}}</h1>
    {{/if}}
    <p>Lorem ipsum</p>
</div>
Run Code Online (Sandbox Code Playgroud)

这个小小的解决方法适合我,但有一个问题.如上所述注册助手,返回纯HTML转义字符串.因此,调用帮助程序不会输出呈现的HTML代码段.它将HTML作为转义字符串输出.

你有没有人知道如何让我的代码片段将HTML作为HTML返回?

/帕斯卡尔

html rendering templating helpers handlebars.js

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

是否可以在Polymer中跨Web组件(和导入)共享mixin?

作为如何使用PolymerPolymer多重继承/组合扩展多个元素的后续内容,基于他们的答案,我想知道是否可以跨多个Web组件(和多个导入)共享mixin以重用功能.

Mixins似乎是跨多个自定义元素共享功能的唯一方式.但是,您似乎只能在一次导入中使用mixin.这意味着,如果你有一个mixin,它给web组件一个特定的功能(比方说draggable),如果它不在同一个导入中,就不可能将它混合到你的Polymer元素的构造中.

也许我在那里遇到了一些问题,但如果没有,感觉mixins的使用也不是很灵活,因为我仍然无法在Web组件之间共享功能.

更新:

正如斯科特·迈尔斯在他的评论出来指出,这有可能在一个以上的进口使用混入.我只是不知道该怎么做,事实证明,这是非常直接的.

假设我们有一个mixin应该在多个组件之间共享,但组件分布在许多导入上.所有人要做的就是在window对象的自己导入中定义mixin .例如:

shared.html

<script>
  window.sharedMixin = {
    // shared functionality goes here
  };
</script>
Run Code Online (Sandbox Code Playgroud)

然后,在另一个导入中重用另一个组件中的mixin就像导入一样简单 shared.html.

我-component.html

<link rel="import" href="path/to/shared.html">
Run Code Online (Sandbox Code Playgroud)

从那时起,sharedMixin在该导入中可用作全局对象:

Polymer('my-component', Platform.mixin({
  // my-component logic
}, sharedMixin);
Run Code Online (Sandbox Code Playgroud)

我希望能帮助别人.我会写一篇关于它的博客文章,并将它链接到这里.

更新2

我在这里写了一篇博文:http://pascalprecht.github.io/2014/07/14/inheritance-and-composition-with-polymer/

web-component polymer

9
推荐指数
1
解决办法
2655
查看次数

在什么情况下,不借用的API更受欢迎?

Rust拥有所有权和借贷的概念.如果函数没有将其参数作为引用借用,则该函数的参数将被移动,并且一旦超出范围将被释放.

采取这个功能:

fn build_user(email: String, username: String) -> User {
    User {
        email: email,
        username: username,
    }
}
Run Code Online (Sandbox Code Playgroud)

此功能可以称为:

let email = String::from("foo@example.com");
let username = String::from("username");

let user = build_user(email, username);
Run Code Online (Sandbox Code Playgroud)

由于emailusername已被移动,他们不能再被使用之后build_user被调用.

这可以通过使API使用借来的引用来修复.

考虑到这一点,在设计API时,哪些场景总是倾向于不使用借用?

api-design reference move-semantics rust borrowing

9
推荐指数
1
解决办法
411
查看次数

如何使用Polymer扩展多个元素

我知道有关于多重继承/组合的这个问题.但是,似乎这个问题更多的是关于如何从其他元素中的多个现有元素重用功能.显然,解决方案就是mixins.

我想知道,如何在不真正借用现有元素的情况下实际"装饰"现有元素.我们知道extends可以使用这个属性来扩展Polymer的现有元素.

因此,使正常<button>行为像a mega-button一样简单,就像<button is="mega-button">为它附加和编写组件一样简单.但事实证明,extend多个元素是不可能的.所以类似的东西extends="foo bar"不起作用.如果我想构建一个可以实际应用于不同元素的Web组件,该怎么办?

例如,我不想只扩展<button>元素,mega-button但也可能只是元素,<a>以便它看起来像行为mega-button

mixin方法在这里并没有真正帮助(据我所知),因为它们不再为不同的Web组件提供共享逻辑.这意味着,您可以创建多个组件,并从mixin重用逻辑(打包在mixin中).

我需要的是一种创建一个可以应用于多个元素的Web组件的方法.

知道如何解决这个问题吗?

UPDATE

Addy回答了一些处理该用例的方法.这是基于一种方法的后续问题

如何在Polymer中注册我自己的元素时,如何找出要扩展的元素

另一个是否有可能在Polymer中分享Web组件(和导入)中的mixin?

更新2

我写了一篇文章,总结了我对聚合物遗传和组成的经验和学习:http://pascalprecht.github.io/2014/07/14/inheritance-and-composition-with-polymer/

web-component polymer

7
推荐指数
1
解决办法
2357
查看次数

如何在IPFS中重新创建多哈希的哈希摘要

假设我要像这样向IPFS添加数据:

$ echo Hello World | ipfs add
Run Code Online (Sandbox Code Playgroud)

这将给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u-一个CID,它是Base58编码的Multihash。

将其转换为Base16,告诉我IPFS添加的哈希摘要是SHA2-256哈希:

12 - 20 - 74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca
<hash-type> - <hash-length> - <hash-digest>
Run Code Online (Sandbox Code Playgroud)

我知道IPFS不仅会散列数据,而且实际上会先将其序列化为Unixfs protobuf,然后再将其放入dag中。

我想揭开神秘的面纱,但该如何解决这个问题,74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca但我不太确定如何掌握已创建的数据,该数据将Unixfs protobuf与数据一起保存。

例如,我可以将序列化的原始数据写入磁盘并使用protobuf解码器进行检查:

$ ipfs block get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u > /tmp/block.raw
$ protoc --decode_raw < /tmp/block.raw
Run Code Online (Sandbox Code Playgroud)

这将使我获得可读格式的序列化数据:

1 {
  1: 2
  2: "Hello World\n"
  3: 12
}
Run Code Online (Sandbox Code Playgroud)

但是,通过SHA-256进行管道传递仍然会给我带来不同的哈希值,这是有道理的,因为IPFS会将protobuf置于dag中并对其进行多次哈希处理。

$ protoc --decode_raw < /tmp/block.raw | shasum -a 256
Run Code Online (Sandbox Code Playgroud)

因此,我决定弄清楚如何掌握该dag节点,自己对其进行哈希处理,以获取所需的哈希值。

我希望使用它ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u可以给我提供一个多哈希,然后可以对其进行解码,但是事实证明,它会返回一些我不知道如何检查的其他数据哈希:

$ ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
$ {"data":"CAISDEhlbGxvIFdvcmxkChgM","links":[]}
Run Code Online (Sandbox Code Playgroud)

关于如何data从此处解码的任何想法?

更新 …

ipfs

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

Why does firebase' linkWithPopup() not set the user `photoUrl` in firebase?

I'm working on implementing converting anonymous users to permanent users using GitHub auth provider.

The idea is that in my app, users are always automatically authenticated as anonymous users. Then, when they click the "Sign in with GitHub" button, basically what happens is that my app first tries to link that anonymous user to the GitHub credentials (which is basically a signin at the same time), but if the linking fails because the user already exists (e.g. has been linked …

firebase firebase-authentication

5
推荐指数
1
解决办法
779
查看次数

使用 Result 在控制流中产生副作用的推荐方法是什么?

Result::and_then()对于编写控制流非常有用。

fn some_fn() -> Result<String, Error> {
    Ok("Yay".to_string())
}
Run Code Online (Sandbox Code Playgroud)
some_fn()
    .and_then(|value| some_other_fn())
    .and_then(|some_other_value| /* ... */)
Run Code Online (Sandbox Code Playgroud)

有时我们想要产生副作用并仍然传播发出的值。假设我们想在收到值时打印它:

some_fn()
    .and_then(|value| {
        println!("{}", &value);
        some_other_fn()
    })
    .and_then(|some_other_value| /* ... */)
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?像Reactive Extensions 的tap()操作符这样的东西会很棒。

control-flow rust

4
推荐指数
1
解决办法
1485
查看次数

为什么 IPFS 在初始化节点时会生成 RSA 密钥对?

当初始化 ipfs 节点时,ipfs 似乎也会生成一个 RSA 密钥对:

$ jsipfs init
  initializing ipfs node at /Users/pascalprecht/.jsipfs
  generating 2048-bit RSA keypair...done
  peer identity: QmYDkVX6kUFrn8FKiDKrFqhrkbr4Ax1nxxvgJfT5C6feXv
  to get started, enter:

     jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme
Run Code Online (Sandbox Code Playgroud)

虽然我知道非对称加密是安全性和完整性方面的关键构建块之一,但我仍然想知道为什么 IPFS 在节点初始化以及使用地点和时间上生成密钥对。

ipfs

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