使用attr绑定生成控件ID后调用viewmodel方法

时间:2016-06-27 07:34:21

标签: knockout.js

我必须在动态attr绑定生成控件ID之后调用viewmodel方法。

以下是我的HTML代码

class func getDateFor(forOption: Int) -> String {

    let unit : NSCalendarUnit = [.WeekOfYear, .Month, .Year][forOption]
    let calendar = NSCalendar.currentCalendar()
    let date = calendar.dateByAddingUnit(unit, value: -1, toDate: NSDate(), options: NSCalendarOptions.WrapComponents)
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
    formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    var returnDate = formatter.stringFromDate(date!)
    returnDate = returnDate.stringByReplacingOccurrencesOfString(":", withString: "%3A")
    return returnDate
} 

一旦生成了控件ID,我想调用一个方法,使用$(id)选择器进行一些工作。

为div生成id后,如何调用viewmodel方法?

1 个答案:

答案 0 :(得分:1)

一般规则是:

每当你想触摸DOM时,

  1. 尝试通过knockout的默认绑定尽可能多地做。大多数事件处理都可以使用@"C:\MyCompanyName\Services\MyFiles"event绑定来完成。可以使用clickvalue绑定将值链接到您的viewmodel。可以使用textInput
  2. 应用样式
  3. 如果没有默认绑定,create a custom binding
  4. 某些默认绑定具有css选项,您可以在其中指定一个回调方法,该方法将传递已应用绑定的元素(例如,afterRender绑定)。但是,这些方法旨在用于动画/过渡;不推荐更改DOM。

    使用foreach方法的自定义绑定示例:

    init

    使用HTML:

    ko.bindingHandlers.logIDAfterBind = {
      init: function(element) {
        console.log(element.id);
      }
    };
    

    在评论中对问题进行编辑:

      

    如何将常量传递给我的自定义绑定处理程序?

    <div data-bind="attr: {id: 'bookScreen_' + bookId }, logIDAfterBind"></div> 方法的签名实际上比我在简化示例中显示的更加通用。您可以使用init将值(实际上任何有效的javascript)传递给绑定。例如:

    bindingKey: bindingValue

    此值包含在函数中,可通过<div data-bind="attr: {id: 'bookScreen_' + bookId }, logIDAfterBind: 'a_constant_string'"></div>

    的第二个参数访问
    init

    在支持可观察值和其他值的绑定中,您经常会看到init: function(element, valueAccessor) { var myConstant = valueAccessor(); // Will be "a_constant_string" } 被使用。

    ko.unwrap