2010-03-17 154 views
4

我使用关联的客户端API创建ASP.NET服务器控件。ScriptControlDescriptor.AddProperty&只读属性

在我GetScriptDescriptors()方法我关联一个名为“行”的属性...

descriptor.AddProperty("rows", this.IntRows); 

在我的客户端API我想是只读的我的“行”属性.. 。

MyControl = function(element) 
{ 
    MyControl.initializeBase(this, [element]); 
    this._rows; 
} 

MyControl.prototype = 
{ 
    initialize: function() 
    { 
     MyControl.callBaseMethod(this, 'initialize'); 
    }, 

    get_rows: function() 
    { 
     return this._rows; 
    }, 

    dispose: function() 
    { 
     MyControl.callBaseMethod(this, 'dispose'); 
    } 
} 

然而,这将导致以下错误......

Error: Sys.InvalidOperationException: 'rows' is not a writable property.

下制定者似乎被要求或DER为$ create语句分配“行”这是初始值:

set_rows: function(value) 
{ 
    this._rows = value; 
}, 

我怎样才能让“行”属性只读在客户端API,如果需要的setter从赋值AddProperty调用?

回答

0

最简单的方法是让set_rows忽略任何输入。实际上,这应该完全停止Exception并且仍然为该属性提供Read Only功能。

set_rows: function(value) 
{ 
    value = null; 
}, 
+0

感谢您的回复。我还没有机会测试它。不过,我不确定我是否遵循了您的示例。如果调用者被调用,那么不会简单地清除“行”值吗? – 2011-01-21 09:10:31

+0

@Poz你的纠正会。我将错误的选项设置为null。另一种选择是抛出一个未实现的异常,但是这需要由编码器处理。宁可只是默默地忽略这个集合。 – BinaryMisfit 2011-01-21 09:22:40

+0

感谢您的澄清。 – 2011-01-24 14:51:36