【问题标题】:Issue featch with where condition in titanium alloy钛合金中的条件问题
【发布时间】:2014-11-22 09:53:34
【问题描述】:

我的应用中有两个选择列表,它们都是来自数据库的动态值。根据在第一个选择列表中选择的值显示第二个选择列表中的值。因此,第一个选择列表的更改事件,第二个选择列表值应该动态更改而不刷新页面。

我的代码如下,

控制器:

      $.picker.addEventListener('change',function(e){
    languageid = e.row.title;
    alert("language is : "+ languageid);
    movie.fetch({query: "SELECT * FROM movies WHERE id = '"+languageid+"';"});
    var column = Ti.UI.createPickerColumn();
    movie.each(function(model){
          var row = Ti.UI.createPickerRow({
                         title: model.get("movieName")
                     });
           column.addRow(row);
    });
    $.picker1.columns = [column];
   });

查看:

 <Alloy>
    <Collection src="UserLanguage"/>
    <Collection src="movies"/>
    <Window class="container">
    <Picker id="picker"/>
    <Picker id="picker1"/>
    </Window>
</Alloy>

风格:

".container": {
    backgroundColor:"black"
}

"#picker": {
    width: '90%',
    top: '25dp'
}

"#picker1": {
    width: '90%',
    top: '100dp'
}

型号

exports.definition = {
    config : {
        "columns": {
            "id": "text",
            "movieName": "text"
        },
        "adapter": {
            "type": "sql",
            "collection_name": "movies"
        }
    }
};

截图结果

选择的 roe 计数正确,但文本不可见。为什么?

【问题讨论】:

    标签: backbone.js titanium titanium-mobile fetch titanium-alloy


    【解决方案1】:

    只需使用传递给 fetch 函数的查询参数即可:

    $.picker.addEventListener('change',function(e){
        languageid = e.row.title;
        //alert("language is : "+ languageid);
        movie.fetch({query: "SELECT * FROM movie WHERE id = '"+languageid+"';"});
        var column = Ti.UI.createPickerColumn();
        movie.each(function(model){
              var row = Ti.UI.createPickerRow({
                             title: model.get("movieName");
                         });
               column.addRow(row);
        });
        $.picker1.columns = [column];
    });
    

    【讨论】:

    • 现在行显示正确,但行标题文本不可见。什么问题。是造型问题吗?
    • 问题可能出在movieName 属性中。名字对吗?
    • movieName 属性没有问题。我已经更新了问题和屏幕截图。请告诉我为什么文本不可见
    【解决方案2】:

    好的,让我们从头开始,因为当前的解决方案太混乱了......

    查看:(确保您有 models/Movies.js)

    <Alloy>
        <Collection src="UserLanguage"/>
        <Collection src="Movies"/>
    
        <Window class="container">
            <Picker id="picker"/>
            <Picker id="picker1"/>
        </Window>
    </Alloy>
    

    控制器:(问题是@Coyote 从名为movie 而不是movies 的表中选择数据)。所以它应该是这样的:

    var movies = Alloy.Collections.Movies;
    
    $.picker.addEventListener("change", function(e) {
        var column = Ti.UI.createPickerColumn();
    
        movies.fetch({
            query: {
                statement: "SELECT * FROM movies WHERE id = ?;",
                params: [e.row.title] // How can be `title` an id?
            }
        });
    
        movies.each(function(model) {
            var row = Ti.UI.createPickerRow({
                title: model.get("movieName")
            });
    
            column.addRow(row);
        });
    
        $.picker1.columns = [column];
    });
    

    【讨论】:

    • 我不确定,但e.row.title 可能为空,它不可能为空。 jira.appcelerator.org/browse/TIMOB-17263
    • 问题是为什么e.row.title是空的(null)? e.value 呢?我真的不知道你想做什么,但基本上这里params: [e.row.title]必须是一些不为空的值。
    • 现在我没有收到错误,但在第二个选择列表中选择了 2 行,但由于某种原因,列标题不可见。只有空白行显示了我在问题的屏幕截图中附加的内容。为什么?
    • movies.each 中尝试console.log("Row title: " + model.get("movieName"));
    • 在标题中打印 null,[INFO] : Row title: null [INFO] : Row title: null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多