【问题标题】:Collecting and using value from Ember.TextField从 Ember.TextField 收集和使用值
【发布时间】:2023-03-18 19:53:01
【问题描述】:

我正在使用 Ember.js 编写一个小型示例应用程序。我的目标是确定 Ember 的用例。我的应用程序是一个简单的 Twitter 提要查看器。我单击一个 Ember.Button 对象,该对象加载我的 Twitter 提要并将其转储到页面。这一切都很好,但用户名是硬编码的。我想深入挖掘,所以我添加了一个 Ember.TextField 视图,我想用它来指示 Twitter 用户名。

我看到按钮如何定位显示推文的项目符号列表,我还看到它如何知道使用哪个控制器来获取数据。我的问题是如何告诉 Ember 从输入字段中提取用户名值并将其传递给调用推文的方法?我正在添加现有的 JS 代码:

// app.js
var Tweets = Em.Application.create();

Tweets.tweetsArray = Em.ArrayController.create({
    content: [],
    loadTweets: function() {
        var url = 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=commadelimited&callback=?';
        $.getJSON(url,function(data){
            Tweets.tweetsArray.pushObjects(data);
        })
    }
});

这是视图:

<script type="text/x-handlebars">
    <div id="frm">
        {{view Ember.TextField placeholder="Twitter username"}}
        {{#view Ember.Button target="Tweets.tweetsArray" action="loadTweets"}}
            Load Tweets
        {{/view}}
    </div>
    <ul id="tweets">
        {{#each Tweets.tweetsArray}}
            <li>
                <h3>{{user.screen_name}}</h3>
                <p>{{text}}</p>
            </li>
        {{/each}}
    </ul>
</script>

【问题讨论】:

    标签: javascript model-view-controller ember.js


    【解决方案1】:

    您需要在 Ember.Object 上设置用户名,例如您的应用:

    // app.js
    var Tweets = Em.Application.create({username: ""});
    
    Tweets.tweetsArray = Em.ArrayController.create({
        content: [],
        loadTweets: function() {
            var url = 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=' + Tweets.get("username") + '&callback=?';
            $.getJSON(url,function(data){
                Tweets.tweetsArray.pushObjects(data);
            })
        }
    });
    

    然后将其绑定到您的 TextField:

    <script type="text/x-handlebars">
        <div id="frm">
            {{view Ember.TextField valueBinding="Tweets.username" placeholder="Twitter username"}}
            {{#view Ember.Button target="Tweets.tweetsArray" action="loadTweets"}}
                Load Tweets
            {{/view}}
        </div>
        <ul id="tweets">
            {{#each Tweets.tweetsArray}}
                <li>
                    <h3>{{user.screen_name}}</h3>
                    <p>{{text}}</p>
                </li>
            {{/each}}
        </ul>
    </script>
    

    Ember 监视 TextField 上的更改事件,并将保持绑定属性更新。

    【讨论】:

    • 这比我想象的要容易。那么通过将用户名放在应用程序中,是不是让它成为一个全局变量?或者这个概念在 Ember 中真的没有一席之地?
    • 另一个问题。在 JS 文件中你说 Tweets.get('username'),但在视图中你说 Tweets.username。是否有关于其中一个或另一个的规则,或者它们是否可以互换?
    • 在实际应用中,我可能会创建一个控制器对象来包含此变量,但我希望尽可能简单。
    • 另外,Tweets.username 将被把手解释为 Tweets.get("username")。
    • 非常感谢丹。到目前为止,我真的很喜欢 Ember。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多