2014-01-08 61 views
0

我已经在淘汰赛js.I中添加了新属性到映射对象中。我可以访问表中添加的属性。但是当我装一个目的是另一种观点认为它并没有显示增加的属性,但我可以在UI访问映射属性将属性添加到使用映射插件映射的ko模型

function Ticket(jsTicket){ 
    var self = this; 
    ko.mapping.fromJS(jsTicket, {}, this); 
    this.company = "Gover"; 
    this.formattedDate = moment(self.date(),"YYYY-MM-DDTHH:mm:ss").format("MM-DD HH:MM"); 
    //This method call to another page, I could access js attribute in that UI but 
    // couldn't access manually added attributes,what would be the solution to this 
    this.getRunTicket = function(){ 
    servicet.getTicket(self); 
    } 
} 

html页面

<div data-role="page" id="rticketDetailsPage" data-theme="b"> 
     <div data-role="content" data-theme="b" data-position="fixed"> 
      <!-- mapped attribute from JS --> 
      <p>NO : <span data-bind="text: ticketNumber()"></p> 
      <!-- Manually added attributes -->  
      <p>Date : <span data-bind="text: formattedDate()"></p> 
      <p>Company : <span data-bind="text: company()"></p> 
     </div> 
    </> 

Data grid Model 

function DataGrid(){ 
    var self = this; 
    self.dataGrid = ko.observableArray(); 

    self.addTicketToGrid = function(ticket){ 
     self.dataGrid.push(ticket); 
    } 
} 

数据网格的HTML

<tbody data-bind="foreach : dataGrid"> 
     <tr> 
     <td><span data-bind="text : number(),click: getTicket"></span></td> 
     <!-- formatted date is manually added attribute,displays in grid--> 
     <td><span data-bind="text : formattedDate()></span></td> 
     <td><span data-bind="text : operatorName()"></span></td> 
     </tr> 
</tbody> 

为什么我无法在该范围内手动添加添加的属性?

预先感谢您

回答

1

companyformattedDateobservable S,但你想,如果他们来访问它们。它们是简单的字符串,但您的绑定尝试将它们称为函数。

+0

谢谢,现在正在工作 – ExCode

1

您应该将属性添加到映射对象的方式是通过映射定义上的create函数(ko.mapping.fromJS的第二个参数)。

var mapping = { 
    create: function(opts) { 
     var result = ko.mapping.fromJS(opts.data); 
     result.company = ko.observable("Gover"); 
     return result; 
    } 
}; 

然后在你的门票构造

ko.mapping.fromJS(jsTicket, mapping, this); 

这应该有助于解决你的问题,因为对象将始终具有附加属性。

另一条建议是使用自定义绑定或至少计算值来格式化表中的日期。

+0

谢谢,我会牢记这一点。 – ExCode

相关问题