问题是我渲染 View 并发送一些数据
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}
无法正常工作,但是为什么在需要数组时却得到一个字符串?
我做错什么了?
最佳答案
您不能在隐藏的输入字段中“存储”数组,但可以做的是存储产品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 View 中:
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}
pd
的值现在将是用逗号分隔的产品ID列表虽然不是特别优雅,但是可以解决问题。