【问题标题】:Using the same jade view for edit and create使用相同的翡翠视图进行编辑和创建
【发布时间】:2013-03-11 18:17:18
【问题描述】:

希望这不是太愚蠢的问题,因为我试图了解节点。

我一直在研究 express 框架,并试图解决创建/编辑视图的简单问题。

如果我有如下玉观:

input(name='bar', id='bar', value=#{foo.bar})

视图需要我传回的模型上的属性 foo.bar,这对于编辑屏幕来说很好。但是,如果这是一个创建屏幕,我真的不想传回一个空模型。这应该如何处理?这只是我必须传回一个空模型的情况吗?如果是这样,任何指向此模式的指针都会很棒。

谢谢。

(我知道我缺少一些基本的东西)

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    我自己通过简单地始终确保存在 foo 对象,然后无论如何都引用 foo.bar 来完成此操作。这可以通过很多方式来完成。您可以劫持 res.render 或使用您自己的自定义渲染方法,就像这样(初始化时的某个地方):

    express.response.renderFooAdmin = function (view, data, callback) {
        data.foo = data.foo || {};
        this.render(view, data, callback);
    };
    

    在你的路线上:

    res.renderFooAdmin('view', data);
    

    并且直接引用对象而不是通过 #{} 块来不打印“未定义”:

    input(name='bar', id='bar', value=foo.bar)
    

    【讨论】:

    • 啊,我手头没有节点,但只要父属性在那里,您就可以尝试引用一个子节点。如果它不存在,那么它什么都不会打印?那么如果 bar 不存在呢?
    • 确实如此。 undefined.bar 无效,而 ({}).bar 未定义但有效。当 Jade 遇到用attr=obj.prop 打印的未定义属性时,它不会被打印。如果您使用attr="#{obj.prop}",它将被解释为字符串“未定义”,这通常不是您想要的。 (不确定attr=#{obj.prop} 会发生什么,从未尝试过)
    • 有趣。我稍后会尝试。但是现在,请考虑您的答案是正确的:D
    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多