从Node传递数据到Jade模板?

3
问题是我渲染了一个视图并发送了一些数据。
console.log(products); // shows an array
res.render('seller/sell',{'shop_id':req.user.shop_id ,'products':products});

我在jade中以这种方式保存数据

input(id='shop_id',type='hidden',name='shop_id',value='#{shop_id}')
input(id='pd',type='hidden',name='pd',value='#{products}')

 if(products !='')
    each val , key in products
        a(href!='home/sell/edit?id=#{val.id} ',class='product')
            img(class='product_thum',src!='#{ val.product_thum}',alt!='#{ val.product_name}',title!='#{ val.product_name}')
            p.product_name #{ val.product_name}

然后我尝试获取产品。
var d = $('#pd').val();
console.log(typeof d);  //shows string

我知道产品应该是一个数组,否则

    if(products !='')
    each val , key in products
        a(href!='home/sell/edit?id=#{val.id} ',class='product')
            img(class='product_thum',src!='#{ val.product_thum}',alt!='#{ val.product_name}',title!='#{ val.product_name}')
            p.product_name #{ val.product_name}

无法工作,但为什么我需要数组时得到一个字符串?
我做错了什么?

你想从哪里“获取”产品?Jade只是一种模板语言,可以“编译”成HTML... - Alex
你的字符串长什么样子?你可以像这样做:var array = string.split(','); - zemirco
你的数组 'products' 长什么样? - Alex
它看起来像这样:{某物},{某物},{某物} - paynestrike
你不能使用 var array = string.split(','); 这种方式,因为 {something},{something},{something} 中的 something 也包含 ','。 - paynestrike
2个回答

5
您无法在隐藏输入字段中“存储”数组,但您可以存储产品ID列表,例如:
var productIds = products.map(function(product){return product.id}).toString();

res.render('seller/sell',
  {'shop_id':req.user.shop_id ,'products':products, productIds: productIds});

然后,在你的jade视图中:
input(id='shop_id',type='hidden',name='shop_id',value='#{shop_id}')
input(id='pd',type='hidden',name='pd',value='#{productIds}')

 if(products !='')
    each val , key in products
        a(href!='home/sell/edit?id=#{val.id} ',class='product')
            img(class='product_thum',src!='#{ val.product_thum}',alt!='#{ val.product_name}',title!='#{ val.product_name}')
            p.product_name #{ val.product_name}
< p > pd 的值现在将是逗号分隔的产品 Ids 列表。 < /p > < p > 这种方法可能不太优雅,但它解决了问题。 < /p >

你的解决方案应该是可行的,但如果我需要产品中的所有数据呢? - paynestrike
有没有其他方法可以直接将数据从服务器传递到客户端的JS? - paynestrike
好的 res.render('seller/sell', {'shop_id':req.user.shop_id ,'products':products}) 将同时渲染 sell 视图并发送数据,我需要的是将数据保存到本地存储中,所以我需要一种在 js 中获取数据的方法。我知道我可以做另一个 ajax get(),但是真的有必要两次查询服务器来完成这个操作吗?这就是为什么我需要在 js 中获取数据的原因。 - paynestrike
我需要一个 JSON 对象,但它被传递为字符串。 - paynestrike
你可以尝试使用类似于“span.hidden <script type="javascript">var products = #{products};</script>”这样的方式来渲染脚本标签。 - Konstantin Isaev
显示剩余3条评论

0

展示逗号分隔字符串的最佳方法 示例数据 = abc,pqr,lmn;

below code in js file
test = data.toString().split('",");
res.render("show.jade",{list: test});
display the code in jade as
table
 tbody
    each item in list
     tr
      td #{item}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接